Javascript中引用的对象数组数组

Jas*_*bas 4 javascript arrays reference underscore.js

我有一个数组如下

var sample = [{a:1, b: 1, c:1}, {a:1, b: 1, c:1}, {a:1, b: 1, c:1}];
Run Code Online (Sandbox Code Playgroud)

然后我运行下面的代码,并尝试groupsOfItems[0].sample[0].a = 10, groupsOfItems[0].sample[0].a,groupsOfItems[1].sample[0].agroupsOfItems[2].sample[0].a获得变更为10.

我该如何防止这种情况?

var sample = [{a:1, b: 1, c:1}, {a:1, b: 1, c:1}, {a:1, b: 1, c:1}];


    var groupsOfItems = [];

    for(let i = 0; i < 10; i++) {
        var item = {};
        item.sample = _.clone(sample);
        groupsOfItems.push(item);
    }



  groupsOfItems[0].sample[0].a = 10
  
  console.log(groupsOfItems[0].sample[0].a,groupsOfItems[1].sample[0].a,groupsOfItems[2].sample[0].a);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Run Code Online (Sandbox Code Playgroud)

gur*_*372 6

在将对象赋予数组的属性之前,您需要克隆该对象

更换

item.sample = sample;
Run Code Online (Sandbox Code Playgroud)

item.sample = JSON.parse(JSON.stringify(sample));
Run Code Online (Sandbox Code Playgroud)

请注意,当样本对象增长时,这种克隆方法效率会降低.尝试这里显示的其他一些方法.