Javascript 如何按id在对象数组中添加新值(不是新项)

Javascript 如何按id在对象数组中添加新值(不是新项),javascript,arrays,object,Javascript,Arrays,Object,我正在尝试按id在数组中添加新的值。我没有尝试在数组中添加新项。。。为此,我可以使用push(),但它会添加新项,而不是新值 我正在尝试这样做: 我的阵列: const data = [ { "id": 1, "year":2019, "value": 2, }, { "id": 2, "year": 2019, "value": 89, }, { "id":

我正在尝试按id在数组中添加新的
。我没有尝试在数组中添加新项。。。为此,我可以使用
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
  }
})
const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
      "item": 55
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]
data.forEach(item => {
  if(item.id === 2){
    item.item = 55; //data inside id 2 -> item: 55
  }
})
因此,我的新
数据
数组如下所示:

data.forEach(item => {
  if(item.id === 2){
    //data inside id 2 -> item: 55
  }
})
const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
      "item": 55
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]
data.forEach(item => {
  if(item.id === 2){
    item.item = 55; //data inside id 2 -> item: 55
  }
})
在我的大多数搜索中,我只找到了如何添加新元素。但是我知道怎么做(
push()


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

试试看

data.find(x=> x.id==2).item=55;
const数据=
[  
{  
“id”:1,
“年份”:2019年,
“价值”:2,
},
{  
“id”:2,
“年份”:2019年,
“价值”:89,
},   
{  
“id”:3,
“年份”:2019年,
“价值”:99,
}   
]
data.find(x=>x.id==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;
}

您可以根据您的条件迭代和赋值

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

您可以使用
数组实现方法。查找
以避免不必要的迭代:

const数组=[
{  
“id”:1,
“年份”:2019年,
“价值”:2,
},
{  
“id”:2,
“年份”:2019年,
“价值”:89,
},   
{  
“id”:3,
“年份”:2019年,
“价值”:99,
}   
];
常量changeValue=(数组、id、字段、值)=>
查找(el=>el.id==id)[field]=value;
changeValue(数组,1,'年',9999);

log('result:',数组)您的代码或多或少就在那里。要设置项的属性,可以执行
object.propertyName=…
object[“propertyName”]=…

这样,您只需更新示例,使其如下所示:

data.forEach(item => {
  if(item.id === 2){
    //data inside id 2 -> item: 55
  }
})
const data = 
[  
   {  
      "id": 1,
      "year":2019,
      "value": 2,
   },
   {  
      "id": 2,
      "year": 2019,
      "value": 89,
      "item": 55
   },   
   {  
      "id": 3,
      "year": 2019,
      "value": 99,
   }   
]
data.forEach(item => {
  if(item.id === 2){
    item.item = 55; //data inside id 2 -> item: 55
  }
})

作为一种更有效的选择,考虑一下。在找到

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)|{});

控制台日志(数据)您有一个对象数组,并且希望向其中一个对象添加一个字段。因此,首先,您必须找到要更改的对象。数组项可以通过索引访问,但您不知道索引。有几种方法可以在数组中查找项

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()
向数组中添加一个项。它不会更改数组中的现有项。

不要使用
map()
如果不使用结果,请使用
。forEach()
@Barmar在更改或更改数据时不会使用映射。它将更快并返回新阵列。任何thoughts@Kamal变换数组中的所有元素时,
map
很好。在您的示例中,您没有映射任何内容—您只是使用
map
作为迭代数组的工具。在这种情况下,它是有效的,但它只是一种误导性很强的“代码气味”。更不用说,像
.find()
(在找到要查找的元素时退出)这样的迭代将更有效率。
.map()
.forEach()
之间的唯一区别是
.map()
将回调函数的结果收集到一个新数组中。为什么要选择一个执行X+Y的函数,而另一个函数只执行X,而你不关心Y?谢谢@TylerRoper和Barmar的澄清。@Barmar这将简化调试过程。@Barmar不知道上下文,我们无法确定这是好是坏。如果预期ID应该始终在该对象中,那么如果不是,它可能会抛出一个错误。