상황
나는 중첩 된 객체와 객체의 배열을 복제하려고합니다. 같은Lodash의 .clone 및 .cloneDeep 행동
뭔가 다음 _.clone
방법과 isDeep
매개 변수와
var data = [
{ id: 1, values: { a: 'a', b: 'b' } },
{ id: 2, values: { c: 'c', d: 'd' } }
];
_.Clone
true
에서 :
:If isDeep is true nested objects will also be cloned, otherwise they will be assigned by reference.
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'
예상
무엇이 잘못 되었나요? 또한
나는 _.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
으로 $ .extend : 거친 토끼와 루이스 '의견에
var clone = $.extend(true, {}, data);
console.log(_.isEqual(data, clone)); // false, clone[1].values.d == 'd'
복제 버전의 lodash 버전을 사용하고 있으며 밑줄 버전을 사용하지 않았습니까? 처음에 lodash.js를 추가하고 underscore.js를 추가하면 설명하는 것과 동일한 동작을 얻습니다. –
질문에 코드를 사용하고 로다시를 '_'에 할당하면 질문에 명시된 문제를 재현 할 수 없습니다. (즉, 'isDeep'을'true '로 설정 한'_.clone'은 예상대로 작동합니다.) Gruff Bunny의 가설은 좋은 것입니다. 나는 밑줄에 대한 정확한 드롭 인 대체로서 lodash를 사용하는 방법이 있다고 믿습니다 .js. 밑줄을 그어서 사용하지 않기 때문에 lodash를 사용하는 것이 좋을 것 같습니다 .js는 그렇게하지 않습니다. – Louis