如何使用for循环把对象push到数组中,且前面的值不会被覆盖

当你想把一个对象循环遍历去给定对象赋值的时候,你想得到的结果是[{age:20},{age:21},{age:22}],但是你可能循环出来的push的结果是[{age:22},{age:22},{age:22}]该如何解决这种情况呢,原因是什么?

当你按照以下方法进行书写的时候就会出现值被覆盖只能显示最后的值

    var arr = []
    var obj = {}
    for (var i = 0; i < 5; i++) {
        obj.age = i + 20
        arr.push(obj)
    }
    console.log(arr)   //[{ age: 24 },{ age: 24 },{ age: 24 },{ age: 24 },{ age: 24 }]

原因:每次取出来的值都放在了obj.age中,因为是在外面定义的对象,所以obj的地址是一样的,arr中保存的是obj的地址,当最后一次给obj.age赋值的时候,由于是同一个obj,所以最后一次给obj.age赋值的后会把之前的值覆盖掉。

解决方式很简单,就是把对象定义到循环里面。

    var arr = []
    for (var i = 0; i < 5; i++) {
        var obj = {}  //在里面定义对象
        obj.age = i + 20
        arr.push(obj)
    }
    console.log(arr)   //[{ age: 20 },{ age: 21 },{ age: 22 },{ age: 23 },{ age: 24 }]

 

posted @ 2019-11-22 14:25  SHY13  阅读(3108)  评论(0编辑  收藏  举报