Проблема с копированием массива, имеющего строковый индекс jquery
Я пытаюсь скопировать массив ar
который содержит строковые индексы, в другой массив arCopy
используя jquery. Массив выглядит так, как показано здесь. Сначала я попытался скопировать массивы, такие как:
var arCopy = ar;
Но когда я пытаюсь добавить новое значение в массив arCopy
вставили в ar
также. Итак, я попробовал с slice
:
var ar = [];
ar['color'] = ['red', 'blue'];
var arCopy = ar.slice();
ar['color'].push("kk");
arCopy['color'].push("kk");
console.log(ar); // outputs red,blue,kk,kk
Но slice
также выдвигает значения в исходный массив ar
, Это потому, что я использую массив с индексом строки?
Может кто-нибудь помочь мне исправить это? Заранее спасибо.
2 ответа
Скопировать массив с помощью
arCopy = ar['color'].slice();
он скопирует массив, созданный внутри вашего массива, в соответствующий массив
Это то, что делает ваш код
var ar = []; //create empty Array "ar"
ar['color'] = ['red', 'blue']; //adding an array on 'color' parameter
var arCopy = ar.slice(); //cloning(copy) array "ar" on arCopy
arCopy = ar;//make arCopy and ar the same object (remember that Array inherits from object)
ar['color'].push("kk");//adding "kk" to ar (and arCopy because now is the same object)
arCopy['color'].push("kk");//adding "kk" to arCopy (and ar because now is the same object)
console.log(ar); // outputs red,blue,kk,kk
ОБНОВИТЬ
Вы можете использовать объекты в качестве массива, но вы не можете использовать массивы в качестве объектов, поэтому вы не можете добавить аргумент для массивов, только значения
var ar = {};
ar.color = ['red', 'blue'];
var arCopy = JSON.parse(JSON.stringify(ar));
ar['color'].push("kk1");
arCopy['color'].push("kk2");
console.log(ar); // outputs {"color":["red","blue","kk1"]}
console.log(arCopy); // outputs {"color":["red","blue","kk2"]}
определение slice():
Метод slice() возвращает выбранные элементы в массиве как новый объект массива.
Метод slice() выбирает элементы, которые начинаются с заданного аргумента начала и заканчиваются, но не включают заданный аргумент конца.