簡體   English   中英

如何使用不可變的js取消列表中的每個元素?

[英]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轉換為不可變的ListMap如果它是數組的話。 對象,而以下示例則沒有。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM