我正在尝试通过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
内添加新值?
答案 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()
将一个项目添加到数组中。它不会更改数组中的现有项目。