gpt4 book ai didi

javascript - Lodash .clone 和 .cloneDeep 行为

转载 作者:IT王子 更新时间:2023-10-29 03:16:06 24 4
gpt4 key购买 nike

我尝试使用嵌套对象克隆对象数组。

类似于:

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' :

If isDeep is true nested objects will also be cloned, otherwise they will be assigned by reference.

怎么了?

_.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'

最佳答案

感谢 Gruff Bunny 和 Louis 的评论,我找到了问题的根源。

因为我也使用 Backbone.js,所以我加载了一个与 Backbone 和 Underscore 兼容的 Lodash 的特殊构建,它禁用了一些功能。在这个例子中:

var clone = _.clone(data, true);

data[1].values.d = 'x';

我刚刚在我的 Backbone 应用程序中将 Underscore 构建替换为 Normal 构建,应用程序仍在运行。所以我现在可以使用具有预期行为的 Lodash .clone。

Edit 2018:Underscore build doesn't seem to exist anymore .如果您在 2018 年阅读本文,您可能会对 this documentation 感兴趣( Backbone 和 Lodash)。

关于javascript - Lodash .clone 和 .cloneDeep 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21851974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com