Javascript 将对象推送为克隆

Javascript push object as clone

我将 d3 用于交互式网络应用程序。我需要绑定的数据在交互过程中会发生变化,并且由我的 JSON 变量中的一些 selected 对象组成。
为此,我在 JSON 变量上使用了 map 并对 select 适当的对象进行了一些查询。对象被推入一个列表,这个列表被绑定为新数据。
我的问题是,Javascript 将对象作为参考推送。虽然 d3 进行了一些奇特的数据修改,但我的 JSON 变量变得混乱,我的查询将不再有效。
我是否需要用 JSON.stringify()jQuery.extend() 之类的东西复制每个对象,或者是否有不同的解决方案将我的 JSON 变量与我作为数据传递的对象数组分离?

每个 JS 对象都作为引用传递(对象、数组、函数等)。为了制作特定对象的 'deep copy',您可以这样做:

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)

这样您在列表中的数据将不会被修改。

如果你只需要一个浅拷贝,你可以这样做:

arr.push({...o})

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