Skip to content

Commit 78b472b

Browse files
committed
Improve array mangement
1 parent 6e0ea38 commit 78b472b

File tree

1 file changed

+57
-7
lines changed

1 file changed

+57
-7
lines changed

src/component.js

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,26 @@ function _Array(conf) {
9898
}
9999
});
100100

101+
function _copy() {
102+
var i = 0,
103+
j = 0,
104+
length = arr.length;
105+
106+
arrDb.forEach(function (val) {
107+
if ($metamodel.isClassName(type)) {
108+
arr[i] = $helper.getRuntime().require(val);
109+
} else {
110+
arr[i] = val;
111+
}
112+
i = i + 1;
113+
});
114+
115+
for (j = i; j < length; j++) {
116+
delete arr[j];
117+
}
118+
arr.length = arrDb.length;
119+
}
120+
101121
function _add(val, action, start, deleteCount) {
102122
var isClass = false,
103123
i = 0,
@@ -248,15 +268,21 @@ function _Array(conf) {
248268
* @param {_Component|Object} val
249269
*/
250270
arr.push = function push(val) {
251-
return _add(val, 'push');
271+
var result = _add(val, 'push');
272+
_copy();
273+
274+
return result;
252275
};
253276

254277
/* Override unshift method.
255278
* @unshift
256279
* @param {_Component|Object} val
257280
*/
258281
arr.unshift = function unshift(val) {
259-
return _add(val, 'unshift');
282+
var result = _add(val, 'unshift');
283+
_copy();
284+
285+
return result;
260286
};
261287

262288
/* Override concat method.
@@ -265,7 +291,8 @@ function _Array(conf) {
265291
*/
266292
arr.concat = function concat(arr) {
267293
var i = 0,
268-
length = 0;
294+
length = 0,
295+
result = null;
269296

270297
if (Array.isArray(arr)) {
271298
length = arr.length;
@@ -275,23 +302,33 @@ function _Array(conf) {
275302
}
276303

277304
conf.arr = arrDb;
278-
return new _Array(conf);
305+
306+
result = new _Array(conf);
307+
_copy();
308+
309+
return result;
279310
};
280311

281312
/* Override pop method.
282313
* @pop
283314
* @return {_Component|Object} value
284315
*/
285316
arr.pop = function pop() {
286-
return _remove('pop');
317+
var result = _remove('pop');
318+
_copy();
319+
320+
return result;
287321
};
288322

289323
/* Override shift method.
290324
* @shift
291325
* @return {_Component|Object} value
292326
*/
293327
arr.shift = function shift() {
294-
return _remove('shift');
328+
var result = _remove('shift');
329+
_copy();
330+
331+
return result;
295332
};
296333

297334
/* Override sort method.
@@ -300,6 +337,8 @@ function _Array(conf) {
300337
* @return {_Array} the current _Array
301338
*/
302339
arr.sort = function sort(funct) {
340+
var result = null;
341+
303342
arrDb.sort(funct);
304343

305344
if ($helper.isRuntime()) {
@@ -311,7 +350,10 @@ function _Array(conf) {
311350
});
312351
}
313352

314-
return arr;
353+
result = arr;
354+
_copy();
355+
356+
return result;
315357
};
316358

317359
/* Override reverse method.
@@ -329,6 +371,9 @@ function _Array(conf) {
329371
'value': arrDb
330372
});
331373
}
374+
375+
_copy();
376+
332377
return arr;
333378
};
334379

@@ -374,6 +419,9 @@ function _Array(conf) {
374419
});
375420
}
376421
}
422+
423+
_copy();
424+
377425
return result;
378426
};
379427

@@ -383,6 +431,8 @@ function _Array(conf) {
383431
*/
384432
arr.slice = function slice(begin, end) {
385433
var result = arrDb.slice(begin, end);
434+
_copy();
435+
386436
return result;
387437
};
388438

0 commit comments

Comments
 (0)