當你想把一個對象循環遍歷去給定對象賦值的時候,你想得到的結果是[{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 }]