更新数组中对象的值

时间:2019-07-08 20:42:08

标签: javascript

我有一个看起来像这样的对象数组:

[
   {
      "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

3 个答案:

答案 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")