Контекст
Я пытаюсь клонировать массив объектов с вложенными объектами.
Что-то вроде:
var data = [
{ id: 1, values: { a: 'a', b: 'b' } },
{ id: 2, values: { c: 'c', d: 'd' } }
];
_. Клон
С помощью _.clone
и параметра isDeep
в true
:
var clone = _.clone(data, true);
data[1].values.d = 'x';
console.log( _.isEqual(data, clone) ); // true, clone[1].values.d == 'x'
Я ожидал clone[1].values.d == 'd'
:
Если isDeep - это истинные вложенные объекты, также будут клонированы, иначе они будет присвоено по ссылке.
Что не так?
_. CloneDeep
Кроме того, когда я пытаюсь использовать метод _.cloneDeep
, я получаю сообщение об ошибке:
var clone = _.cloneDeep(data);
// Uncaught TypeError: Object function u(n){return n instanceof u?n:new o(n)}
// has no method 'cloneDeep'
Почему эта ошибка?
$. Простираться
С $.extend
клон не имеет ссылки на исходный объект, как ожидалось:
var clone = $.extend(true, {}, data);
console.log( _.isEqual(data, clone) ); // false, clone[1].values.d == 'd'