#javascript
#javascript
Вопрос:
У меня есть:
var test;
var abc = [1,2,3];
test.active = [];
test.active.$selected = 123;
Возможно ли скопировать массив, который содержит [1,2,3]
, в массив test.active без исчезновения test.active.$selected = 123?
Когда я пытаюсь test.active = abc, значение $selected теряется.
Ответ №1:
Вы можете использовать Array.prototype.push()
в сочетании с apply()
для копирования элементов в test.active
массив, сохраняя при этом все свойства нетронутыми.
Примечание: вы не определили test
как объект, поэтому я изменил это.
var test = {}; // define as object
var abc = [1,2,3];
test.active = [];
test.active.$selected = 123;
// copy abc's elements to test.active, while keeping any of test.active's properties
test.active.push.apply(test.active, abc);
console.log(test.active.$selected); // 123
console.log(test.active[0]); // 1
console.log(test.active[1]); // 2
console.log(test.active[2]); // 3
Ответ №2:
На самом деле, да, это возможно. Но я не уверен, нужно ли вам это. Простым способом:
var test;
test.active = [1,2,3];
test.active.$selected = 123;
В этом случае вы назначите test.active
новый массив. И как только все JavaScript станет объектом — вы можете добавить к нему новое свойство. Но с точки зрения здравого смысла — не рекомендуется смешивать 2 разных типа данных (массив и объект). Итак, в вашем случае я бы рекомендовал использовать отдельные свойства для массива и целочисленного значения:
var test;
test.active = [1,2,3];
test.$selected = 123;
Примечание: если у вас более сложный массив, например, объектов и т.д. — Лучше использовать любую библиотеку для его глубокого клонирования. Но это зависит от вашей конкретной проблемы.