如果id匹配或添加到结尾,则使用嵌套对象合并数组

时间:2017-10-19 11:30:08

标签: javascript arrays merge assign

我正在尝试分配克隆/合并对象,该对象具有id匹配或添加到结尾的数组:

1 file(s) copied - abc.jpg.
1 file(s) copied - xyz.jpg.
1 file(s) copied - 123.jpg.

在这种情况下, newState = Object.assign({}, state, { data: { newest: { result: action.payload.result, list: action.payload.items, request: action.payload.items }, itemList: [ ...state.data.itemList, { id: action.payload.id, list: action.payload.items, request: action.payload.items } ] } }); 是一个包含对象的数组,我想在其中查找具有...state.data.itemList的现有对象以及合并列表+请求嵌套对象。但是,如果没有ID的对象,我想将其添加到列表中。

当前的方法总是将它添加到最后,这当然不是我想要的。

感谢。

1 个答案:

答案 0 :(得分:0)

不要感到有压力在一次手术中建立新的状态。这将是我的实施。我会使用Array#some检查我的数组中当前的id。这里有一些有趣的ES6技巧。

const newState = {...state}
const {result, items, id, items} = action.payload
const data = {newest: {result, list: items, request: items}}
const hasId = newState.data.itemList.some(item => item.id === id)
if (!hasId) {
  newState.data.itemList.push({id, list: items, request: items})
}
return {...newState, data}