javascript集合中的引用问题

时间:2017-03-13 04:18:49

标签: javascript arrays

我在javascript集合中遇到了某种引用问题。

这是plunker - > plunker

问题在于,当我在做什么时

approverSteps[0].loadedApprovers.push({prop1: 'test'});

然后,approverSteps集合中第二个元素的loadedApprovers属性即(approverSteps 1)也会更新。我知道它是参考问题,但任何想法如何解决它。

提前多多感谢。

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);