动态在对象中添加项目

时间:2019-04-18 07:45:23

标签: javascript reactjs

我正在尝试在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)   
  }

4 个答案:

答案 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循环更干净。