不可更改地更新对象数组并管理长度减少量

cbu*_*ler 2 javascript immutability ecmascript-6 redux redux-actions

我正在尝试将搜索历史保存在react/redux应用程序中(使用redux-actions)我在reducer中制作.我想保存最近的十次搜索,并在开头有最新的搜索.我有一个对象数组,我想(不可避免地)在数组的开头添加一个新对象,并将所有剩余的结果向下移动一个.我也不希望数组增长超过10个元素.我目前只是每次都用这个覆盖初始元素:

[setWorkPermit]: (state, action) => ({
  ...state,
  searchHistory: Object.assign([...state.searchHistory], { [0]: action.payload }),
}),
Run Code Online (Sandbox Code Playgroud)

我希望在ES6中有一个干净的方法来做到这一点.任何接受者?

小智 5

我认为数组切片可以解决这个问题!

只需构建一个新的数组,其中包含索引为零的新对象,然后是前面0-9个索引的切片,如下所示:

searchHistory: [action.payload, ...state.searchHistory.slice(0,9)],
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!