如何使用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 }]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM