[英]How can you unshift each element of the list with immutable js?
我想取消不可變列表中數組的每個元素
我的執行結果如下。 在此處輸入圖片說明
->列表[列表[new_element],元素,元素,元素]
我想要這個結果。
->列表[new_element,元素,元素,元素]
我該如何解決?
case types.MEMO_LIST_SUCCESS:
if (action.listType === 'new') {
if(action.data.length !== 0) {
return state.setIn(['memoList', 'status'], 'SUCCESS')
.setIn(['memoList', 'data'], data.unshift(fromJS(action.data)));
} else {
return state.setIn(['memoList', 'status'], 'SUCCESS')
}
}
在代碼示例中,從表達式action.data.length
看來,您應該迭代action.data
並將每個項目添加到data
。
如果
action.data
是數組或其他可迭代的,fromJS(action.data)
將為您返回一個新的List
。
您可以使用Array.prototype.reduce
並將data
作為累積的初始值傳遞,並通過迭代action.data
來添加:
if (action.listType === 'new') {
const newData = action.data.reduce((acc, item) => acc.unshift(fromJs(item)), data);
return state
.setIn(['memoList', 'status'], 'SUCCESS')
.setIn(['memoList', 'data'], newData);
}
甚至更簡單,使用List::concat
方法。
請注意,上面的示例顛倒了action.data
中項目的順序,而下面的示例則沒有。
同樣,上面的示例確實將每個item
轉換為不可變的List
或Map
如果它是數組的話。 對象,而以下示例則沒有。
if (action.listType === 'new') {
return state
.setIn(['memoList', 'status'], 'SUCCESS')
.setIn(['memoList', 'data'], fromJS(action.data).concat(data));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.