繁体   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