, что вы пытаетесь сделать, кажется, создавая неполную копию из массива JS. Если это не ваш случай использования, сообщите мне.
Есть несколько способов сделать это в JS
const copy = [...original]; // es6 only, uses Symbol.iterator
const copy = original.slice(); // slices the array from index 0,
// returning a shallow copy
const copy = Array.from(original, val => val); // es6 only, takes an
// array-like object with .length property and a map function
const copy = original.map(x => x);
// call to Array.prototype.map with identity function.
С теми, что вы можете иметь:
const a = [1, 2];
const b = // shallow copy with one of the methods
a.push(3); // and b is still [1, 2]
Быстрое примечание относительно других ответов: быстрый взгляд на угловые документы here кажется чтобы указать, что угловая копия возвращает глубокую копию.
Действительно важно понять разницу: мелкая копия просто создаст новый объект и поместит в него все значения, а глубокая копия попытается сделать копию каждого из этих значений. Это означает, что, поскольку объекты в JS изменяемы, если вы создаете мелкую копию, вы по-прежнему делите все свои значения с другими копиями. Это не так с глубокой копией.
например:
const a1 = [{a: {b: 3}}];
const a2 = // shallow copy
(a1 === 2) // false
a1[0].a.b = 4 // reassign a prop of a value contained inside a1
(a1[0].a.b === 4) // true
Если глубокая копия была сделана, новый объект был бы сделан.
Заключение: используйте то, что вам нужно, в зависимости от вашего варианта использования. Неглубокая копия быстро делается, но подвержена нежелательным мутациям, глубокая копия намного дороже для создания, но невосприимчива к мутациям, вызванным доступом к доле. В качестве побочного примечания, конечно, влияние на GC этих двух подходов (что означает, что мелкая копия не освобождает ссылки на значения, содержащиеся в оригинале ).
Возможный дубликат [Глубокие объекты копирования в угловом?] (Http: // stackoverflow.com/questions/14360401/deep-copying-objects-in-angle) – Mistalis