Javascript推送对象作为克隆

时间:2016-07-25 10:34:45

标签: javascript json d3.js javascript-objects

我将d3用于交互式网络应用程序。我需要绑定的数据在交互期间发生变化,并且由我的JSON变量中的一些选定对象组成 为此,我在JSON变量上使用了map,并进行了一些查询以选择适当的对象。对象被推送到列表中,此列表被绑定为新数据 我的问题是,Javascript推送对象就像引用一样。虽然d3做了一些奇特的数据修改,但我的JSON变量变得混乱,我的查询将不再起作用 我是否需要使用JSON.stringify()jQuery.extend()等内容复制每个对象,或者是否有不同的解决方案将我的JSON变量与作为数据传递的对象数组分离?

2 个答案:

答案 0 :(得分:3)

每个JS对象都作为引用传递(对象,数组,函数等)。为了制作一份“深层复制品”。您可以做的特定对象:

var deepCopy = JSON.parse(JSON.stringify(oldObject)) // 1. - more of a hack
var deepCopy = _.cloneDeep(oldObject); // 2. use some predefined methods from jQuery, lodash or any other library

var shallowCopy = Object.assign({}, oldObject) // 1. - preferred (if you support new ES features)

这样,列表中的数据就不会被修改。

答案 1 :(得分:2)

如果您只需要浅拷贝,则可以这样做:

arr.push({...o})

假设o是您要同时推送和克隆的对象。