[英]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.