使用传播运算符替换集合的对象

时间:2018-11-22 15:39:44

标签: javascript ecmascript-6

我试图返回一个具有更新的tabs数组的新columns对象,并将该对象替换为我的数据源中现有的对象。这是相关的部分。在下面,使用spread,但是,它将我的对象添加到列的末尾。如何使它替换现有的列? 谢谢!

newState = {
  columns: [
    { id: column.id, title: column.title, tabs: removedTabs },
    ...state.columns
  ],
    columnOrder: ["chromeTabs", ...state.columnOrder]
};  

codesandbox link

1 个答案:

答案 0 :(得分:2)

newState = {
  columns: [
    ...state.columns.filter(item => item.id !== column.id),
    { id: column.id, title: column.title, tabs: removedTabs }
  ],
    columnOrder: [...state.columnOrder.filter(item => item !== 'chromeTabs'), "chromeTabs"]
};

返回过滤后的数组,然后使用扩展运算符替换现有项,这将按预期执行操作,仅对对象(因为键是唯一的)而不对数组起作用。

const obj = {
  cool: "is it cool ?"
};

console.log({ ...obj, cool: "definetly" });