Проблема с копированием массива, имеющего строковый индекс 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() выбирает элементы, которые начинаются с заданного аргумента начала и заканчиваются, но не включают заданный аргумент конца.

Другие вопросы по тегам