我正在尝试在for循环中的object中添加项目,但是最后一个项目总是重写我之前添加的值。 P / S我之前曾发布过类似的问题,但是代码太复杂了,我制作了示例来解释我的问题。
这是jsfiddle中的内容:https://jsfiddle.net/armakarma/ykwc3xse/8/
test(){
let array = [4,6,7,1]
let object={}
for (let i = 0; i < array.length; i++){
object[array[i]]={name: 'test', id:30}
if(array[i] > 7){
object[array[i]]={render: true}
} else{
object[array[i]]={render: false}
}
}
console.log(object)
}
答案 0 :(得分:3)
在if / else语句中,您正在覆盖对象键。相反,您应该使用传播运算符将属性添加到现有键中,如下所示:
function test() {
let array = [4, 6, 7, 1];
let object = {};
for (let i = 0; i < array.length; i++) {
object[array[i]] = { name: 'test', id: 30 };
if (array[i] > 7) {
object[array[i]] = { ...object[array[i]], render: true };
} else {
object[array[i]] = { ...object[array[i]], render: false };
}
}
console.log(object);
}
test()
答案 1 :(得分:0)
您应该使用>=
而不是>
,因为要检查的条件是错误的,所以您尝试获得的结果永远不会:
array = [4,6,7,1]
object={}
for (let i = 0; i < array.length; i++) {
object[array[i]] = { name: "test", id: 30 };
if (array[i] >= 7) {
object[array[i]].render = true;
} else {
object[array[i]].render = false;
}
}
console.log(object)
答案 2 :(得分:0)
在您的示例中,您要添加一个object[array[i]]
的属性/属性/键,该属性/属性/键在该循环中将是相同的。
因此,肯定地,if--else块将用相同的键替换该值
您可以执行以下操作:
function test() {
let array = [4,6,7,10]
let object={};
for (let i = 0; i < array.length; i++){
let myobj={name: 'test', id:30};
if(array[i] > 7){
myobj.render= true;
} else{
myobj.render= false;
}
object[array[i]] =myobj;
}
console.log(object);
}
test()
答案 3 :(得分:0)
另一种要做的事情是使用reduce函数:
test() {
let array = [4, 6, 7, 1]
const object = array.reduce((acc, value) => {
return { ...acc, [value]: { name: 'test', age: 30, render: value <= 7 } }
}, {})
console.log(object)
}
比使用for循环更干净。