如何通过ID(不是新项)在对象数组内添加新值

时间:2019-05-07 19:51:30

标签: javascript arrays object

我正在尝试通过ID在数组中添加新的value。我不是要在数组中添加新项目...为此,我可以使用push(),但它可以添加新项目而不是新值。

我正在尝试:

我的数组:

const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]

在特定的id中,我要添加一个新值,如下所示:

data.forEach(item => {
  if(item.id === 2){
    //data inside id 2 -> item: 55
  }
})

所以我的新data数组看起来像这样:

const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
      "item": 55
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]

在大多数搜索中,我发现了如何添加新元素。但这我知道该怎么做(push())。

那么如何在指定的id内添加新值?

6 个答案:

答案 0 :(得分:2)

只需分配要添加的属性:

data.forEach(item => {
  if(item.id === 2){
    item.item = 55;
  }
})

如果ID是唯一的,则可以使用.find()方法:

var el = data.find(item => item.id === 2);
if (el) {
  el.item = 55;
}

答案 1 :(得分:0)

尝试

data.find(x=> x.id==2).item=55;

const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]

data.find(x=>x.id==2).item=55;

console.log(data);

答案 2 :(得分:0)

您可以根据自己的条件迭代和分配值

data.map(function(x){
  if(x.id == 2){
    x.value = 100;
  }
})

答案 3 :(得分:0)

您可以使用Array.find实现方法,以避免不必要的迭代:

const array = [  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
];

const changeValue = (array, id, field, value) =>
  array.find(el => el.id === id)[field] = value;

changeValue(array, 1, 'year', 9999);
console.log('result: ', array);

答案 4 :(得分:0)

您的代码或多或少都在那儿。要设置项目的属性,可以执行object.propertyName = ...object["propertyName"] = ...

有了这个,您只需要更新示例就可以了:

data.forEach(item => {
  if(item.id === 2){
    item.item = 55; //data inside id 2 -> item: 55
  }
})

作为更有效的替代方法,考虑使用Array.find()。找到id之后,它将不会继续遍历数组,而您的forEach总是遍历整个数组。

const data = [ { "id": 1, "year":2019, "value": 2, }, { "id": 2, "year": 2019, "value": 89, }, { "id": 3, "year": 2019, "value": 99, } ];

( data.find(({id})=> id === 2) || {} ).item = 55;
console.log(data);

您会发现我在.find()之后加上|| {}。这样做的简单目的是,如果找不到带有id === 2的项目,则尝试设置该属性不会引发错误。

答案 5 :(得分:0)

您有一个对象数组,并且想要向其中一个对象添加字段。因此,首先,您必须找到要更改的对象。数组项可以通过索引访问,但是您不知道索引。在数组中查找项目的方法有几种。

var item = data.find(function(d, i){
    return item.id === 2; //criteria
});

或使用ES6语法:

var item = data.find(d=>d.id == 2);

之后,您可以按所需方式更改项目。

item.anotherField = 'another value';

如您所说,push()将一个项目添加到数组中。它不会更改数组中的现有项目。