Как я могу скопировать данные массива в объект, у которого есть массив, а также поле?

#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;
  

Примечание: если у вас более сложный массив, например, объектов и т.д. — Лучше использовать любую библиотеку для его глубокого клонирования. Но это зависит от вашей конкретной проблемы.