假设我有一个简单的函数,它基本上将一个对象作为参数,添加一个值,然后将其推送到一个数组。
var objectFruits = {
name: 'apple'
}
var fruits = []
function pushToArray(parameters) {
var newObject;
newObject = Object.assign({}, parameters)
for (var i = 0; i < 3; i++) {
newObject.value = i
fruits.push(newObject)
console.log(newObject)
}
}
pushToArray(objectFruits)
console.log(fruits)
这给了我一个结果:
0: {name: "apple", value: 2}
1: {name: "apple", value: 2}
2: {name: "apple", value: 2}
它应该在哪里:
0: {name: "apple", value: 0}
1: {name: "apple", value: 1}
2: {name: "apple", value: 2}
为什么最终数组fruits
显示每一项的value
是2
?
最佳答案
您在循环的每次迭代中更新同一对象的值,您需要创建一个新对象。
只要输入这一行
newObject = Object.assign({}, parameters)
for循环内
演示
var objectFruits = {
name: 'apple'
};
var fruits = [];
function pushToArray(parameters) {
for (var i = 0; i < 3; i++) {
var newObject = Object.assign({}, parameters)
newObject.value = i
fruits.push(newObject);
}
}
pushToArray(objectFruits);
console.log(fruits);
关于javascript - 在 for 循环中设置对象值,然后推送到数组会导致所有最终数组项具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46823535/