2016-06-29 2 views
0

У меня есть наблюдаемый, который привязан к UI, нажатие кнопки мыши Я создаю новый массив из наблюдаемого массива и делаю манипуляции с новым массивом, но, к сожалению, любые изменения в новом массиве также влияют на старый массив.Глубокопробный наблюдаемый массив нокаута

Я использую ниже код для глубокого копирования.

var clonedArr = $.extend(true, [], masterArray()); 

Мне что-то не хватает. Вы можете найти jsfiddle здесь (https://jsfiddle.net/t5a1xfud/) для получения более подробной информации.

ответ

0

Вам необходимо объединить пустой массив и исходный массив таким образом, чтобы $ .extend не изменял ваш оригинал.
Пример:https://jsfiddle.net/kyr6w2x3/18/

var newArr = []; 
newArr = $.extend([], self.Array(), newArr); 
0

Как глубокая копия (или в противном случае убедитесь, что массивы не связаны между собой): https://jsfiddle.net/t5a1xfud/18/

self.newItems(ko.toJS(self.existingItems())); 

Как не глубокая копия (есть и другие способы также: https://jsfiddle.net/t5a1xfud/19/

self.newItems(self.existingItems()); 

Обратите внимание, что во втором примере после использования кнопки «Копировать в новое» массивы будут связаны. Они, похоже, не связаны, но если вы поочередно нажимаете «Добавить в существующее» и «Добавить в новое», вы увидите, что они влияют друг на друга. Не в первом случае.

Смежные вопросы