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