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 是您要同时推送和克隆的对象。
我将 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 是您要同时推送和克隆的对象。