Javascript 如何按id在对象数组中添加新值(不是新项)
我正在尝试按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":
值
。我没有尝试在数组中添加新项。。。为此,我可以使用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应该始终在该对象中,那么如果不是,它可能会抛出一个错误。