在JS中从数组中选择项目的副本

时间:2017-02-27 10:38:37

标签: javascript typescript copy lodash

我有将数组作为参数的函数。 在功能中,我想找到一个项目并修改其属性。

const defaultGroup = find(groupedCustomFields, group => group.name === DEFAULT_GROUP); //[find][1] - it's `lodash` function
defaultGroup.fields = defaultGroup.fields.filter(f => !f.isGroupEditable);

此代码从集合中选择项目(第一个匹配的项目)并更新对象属性。

结果我的输入集合也被更新(更新了有条件的项目)。 我不想这样做。所以我想我应该修改这个项目的副本。

最好的方法是什么?

const defaultGroup = find(groupedCustomFields, group => group.name === DEFAULT_GROUP),
copyOfDefGroup = Object.assign({}, defaultGroup);

此代码更适合此操作吗?

2 个答案:

答案 0 :(得分:1)

因为您在标签中添加了“TypeScript”,所以我想提一下,从TypeScript 2.1开始,您就有了“对象传播”。

请参阅https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html#object-spread-and-rest

因此您可以轻松地复制对象(或合并多个),如下所示:

let copy = { ...original };

答案 1 :(得分:0)

我认为

Object.assign对复制对象很好。 额外提示 - 要复制数组,array.slice()是最简单的方法