【问题标题】:Merge array with nested objects if id matches or add to the end如果 id 匹配或添加到末尾,则将数组与嵌套对象合并
【发布时间】:2017-10-19 11:30:08
【问题描述】:

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

  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 的现有对象并合并列表 + 请求嵌套对象。但是,如果没有带有 ID 的对象,我想将其添加到列表中。

当前的方法总是将其添加到末尾,这当然不是我想要的。

谢谢。

【问题讨论】:

    标签: javascript arrays merge assign


    【解决方案1】:

    不要为在一次操作中创建新状态而感到压力。这将是我的实现。我会使用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}
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 2011-06-16
      • 2020-12-20
      • 2022-11-28
      • 2019-08-13
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多