javascript - 如何使用下划线克隆对象数组?

标签 javascript underscore.js

#!/usr/bin/env node
var _ = require('underscore');
var a = [{f: 1}, {f:5}, {f:10}];
var b = _.clone(a);
b[1].f = 55;
console.log(JSON.stringify(a));

这导致:

[{"f":1},{"f":55},{"f":10}]

克隆似乎不起作用! 所以我 RTFM,看到这个:

http://underscorejs.org/#clone

Create a shallow-copied clone of the object. Any nested objects or arrays will be copied by reference, not duplicated.

所以 _.clone 没什么用。有没有办法实际复制对象数组?

最佳答案

嗯,有窍门!如果 clone 不“克隆”嵌套对象,您可以通过在 map 调用中显式克隆每个对象来强制它!像这样:

#!/usr/bin/env node
var _ = require('underscore');
var a = [{f: 1}, {f:5}, {f:10}];
var b = _.map(a, _.clone);       // <----
b[1].f = 55;
console.log(JSON.stringify(a));

打印:

[{"f":1},{"f":5},{"f":10}]

耶! a 不变!我现在可以根据自己的喜好编辑 b!

关于javascript - 如何使用下划线克隆对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003059/

相关文章:

javascript - 使用 Javascript 读取本地文本文件

javascript - 如何将 jQuery Tools Overlay 的关闭(x)按钮移到左侧?

javascript - 创建一个包含多个选项的下拉列表,其中包含自定义过滤器

javascript - 从 DOM 中分离对象内容,添加其他内容,然后 append 到 DOM

javascript - UnderscoreJS——_.some() 与 _.find()

javascript - 为什么 event.bubbles 对于 "focusin"和 "focusout"是假的?

javascript - 从值数组中获取多个最大值

javascript - 将数据分成 n 组,按某些数字属性分布

javascript - 按属性遍历嵌套数据

javascript - JavaScript 中的哪些对象具有 .length 属性? (也就是为什么 Underscore _.each 把我的函数对象当作一个数组来对待?)