【发布时间】:2019-05-27 17:36:45
【问题描述】:
我正在尝试修改数组中的单个元素,该数组的元素先前已重复 n 次。为了执行数组复制,我只依赖于duplicateElements(array, times)from this 帖子的自定义函数(请参阅@Bamieh 答案)。如下例所示,问题是我无法在不修改其他元素的情况下修改数组中的单个元素:
function duplicateElements(array, times) {
return array.reduce((res, current) => {
return res.concat(Array(times).fill(current));
}, []);
}
var myvar = duplicateElements([{ a: 1 }, { a: 2 }], 2);
myvar[0].a = 3;
console.log(myvar);
// (4) [{…}, {…}, {…}, {…}]
// 0: {a: 3}
// 1: {a: 3}
// 2: {a: 2}
// 3: {a: 2}
// length: 4
如您所见,myvar[1].a 也被修改了,尽管这不是故意的。我怎样才能避免这个问题?
【问题讨论】:
-
如果您的对象可以有多个嵌套级别,您将不得不搜索对象的深度克隆,因此您可以执行以下操作:
res.concat(Array(times).fill(clone(current)));。否则,您可以使用spread syntax,例如:res.concat(Array(times).fill({...current})) -
@Shidersz 我从 lodash 尝试了
_.cloneDeep(current),但没有成功。 -
它怎么没用,用你试过的代码更新,我刚刚从
Lodash读到了这个方法,只是出于好奇,它在我做的一些测试中运行良好。如果你想使用Lodash,我可以给你举个例子。
标签: javascript arrays