我有一个看起来像这样的对象数组:
[
{
"id": 123,
"timeStamp": "\"2019-07-08T20:36:41.580Z\"",
"data": [1, 2, 3]
},
{
"id": 234,
"timeStamp": "\"2019-07-08T20:37:12.472Z\"",
"data": ["Apples", "Oranges"]
}
]
我想更新数组中对象的特定属性的值,但还想确保将结果返回到新数组中。
如何在不运行某种类型的循环的情况下执行此操作,例如for
循环吗?
说,我想更新第二个对象的data
属性,并向其中添加Bananas
。
答案 0 :(得分:2)
如果您希望结果是一个新数组,则必须首先克隆该数组。这可能比您想象的要复杂(取决于您希望克隆事物的深度)。一种方法是使用JSON stringify ...
请记住,JSON技巧实际上是在后台进行循环。确实,如果要复制数组,这是不可避免的。
要通过ID查找对象,请使用Array.find()
let original = [
{
"id": 123,
"timeStamp": "\"2019-07-08T20:36:41.580Z\"",
"data": [1, 2, 3]
},
{
"id": 234,
"timeStamp": "\"2019-07-08T20:37:12.472Z\"",
"data": ["Apples", "Oranges"]
}
]
let copy = JSON.parse(JSON.stringify(original));
copy.find(obj => obj.id === 234).data.push("Bananas");
console.log(copy);
答案 1 :(得分:0)
类似这样的方法可以解决问题:
let arr = [
{
"id": 123,
"timeStamp": "\"2019-07-08T20:36:41.580Z\"",
"data": [1, 2, 3]
},
{
"id": 234,
"timeStamp": "\"2019-07-08T20:37:12.472Z\"",
"data": ["Apples", "Oranges"]
}
]
arr[1]['data'] = [...arr[1]['data'], 'Bananas']
console.log(arr)
答案 2 :(得分:-1)
以您的示例为例:您可以执行以下操作:说您的对象数组保存在test
变量中
test[1].data.push("Bananas")