我想在不可变列表
中取消移动数组的每个元素我的执行导致以下结果。 enter image description here
- >列表[List [new_element],element,element,element]
我想要这个结果。
- >列出[new_element,element,element,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')
}
}
答案 0 :(得分:0)
从代码示例中的表达式action.data.length
看,您应该迭代action.data
并将每个项目添加到data
。
如果
action.data
是一个数组或其他可迭代,fromJS(action.data)
会返回一个新的List
。
您可以使用Array.prototype.reduce
并传递data
作为积累的初始值,通过迭代action.data
添加{<1}}:
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
中项目的顺序,而以下示例没有。
如果是一个数组resp,上面的例子确实将每个item
转换为不可变List
或Map
。对象,而以下示例没有。
if (action.listType === 'new') {
return state
.setIn(['memoList', 'status'], 'SUCCESS')
.setIn(['memoList', 'data'], fromJS(action.data).concat(data));
}