如何更新/更改数组中的对象?

时间:2019-05-26 17:27:15

标签: javascript

我在本地存储中有对象数组 image

一些带有新数据的函数返回对象。我需要向本地存储中的对象写入新数据(通过ID标识)。

我尝试过,但是...请参见下面的代码

      const result = {
        type: 'mobile',
        id: 'tsy152ivm',
        score: 55
      }

      const links = JSON.parse(localStorage.getItem('links'));
      const item = links.find(item => item.id === result.id);
      //localStorage.setItem('links', JSON.stringify(item));

2 个答案:

答案 0 :(得分:1)

您应该从存储中获取数据,找到目标项目的索引,将旧对象与新对象合并,然后将结果存储在特定索引中,然后将整个数组设置为相同的键。这是最重要的步骤的一部分:

const newData = {
  id: 'ID_2',
  NEW_DATA: 'NEW_DATA'
};

/**
 * Get old data from storage
 */

const dataFromStorage = JSON.parse(localStorage.getItem('links'));

/**
 * Merge old object with a new one (find by ID)
 */

const index = dataFromStorage.findIndex(d => d.id === newData.id);
dataFromStorage[index] = Object.assign({}, dataFromStorage[index], newData)

/**
 * Update full array in storage
 */

localStorage.setItem('links', JSON.stringify(dataFromStorage));

这是指向JSFIDDLE的链接,其中包含完整的示例(执行后检查本地存储)。

答案 1 :(得分:0)

使用.findIndex()查找要修改的对象的索引,然后使用Object.assign()更新对象的属性。

let arr = [{id: 34, name: 'Peter'}, {id: 'tsy152ivm', name: 'Sam'}]

const result = {
        type: 'mobile',
        id: 'tsy152ivm',
        score: 55
      }

const index = arr.findIndex(item => item.id === result.id);

const updated = [...arr.slice(0, index),Object.assign({}, arr[index], { id: result.id, name: 'Samantha' }),
...arr.slice(index + 1)
]

console.log(updated);

或仅使用索引直接修改对象。

let arr = [{id: 34, name: 'Peter'}, {id: 'tsy152ivm', name: 'Sam'}]

const result = {
        type: 'mobile',
        id: 'tsy152ivm',
        score: 55
      }

const index = arr.findIndex(item => item.id === result.id);


arr[index] = Object.assign({}, arr[index], { name: 'Samantha'})

console.log(arr);