我在javascript集合中遇到了某种引用问题。
这是plunker - > plunker
问题在于,当我在做什么时
approverSteps[0].loadedApprovers.push({prop1: 'test'});
然后,approverSteps集合中第二个元素的loadedApprovers属性即(approverSteps 1)也会更新。我知道它是参考问题,但任何想法如何解决它。
提前多多感谢。
答案 0 :(得分:0)
所有项目都将其loadedApprovers
数组作为对同一空数组的引用。
const approvalStepDefault = {
loadedApprovers: [] // this array
};
数组也通过引用传递(它们是对象)。
试试这个:
// no need for approvalStepDefault
let data = {
steps: [{id: '01'},{id: '02'}]
};
let approverSteps = (data.steps || []).map(item => {
const obj = Object.assign({}, item); // copy item so the original item will remain intact (remove this line if you don't want to work on a clone)
obj.loadedApprovers = []; // brand new array for each object
return obj;
});
approverSteps[0].loadedApprovers.push({prop1: 'test'});
console.log(approverSteps);