我在玩Immutable.js。我遇到了这个问题,我无法找到一个很好的解决方案:我有两个列表A和B,我想使用自定义的predicate
函数从列表A中筛选出一些元素,并将它们添加到列表B中两者都是不变的。使用Immutable.js将元素从一个列表移动到另一个列表
这里显而易见的问题是A.filter(predicate)
的返回值是一个新的更新实例,并且删除的元素会丢失。我可以首先添加这些过滤元素:
B = B.concat(A.filterNot(predicate));
A = A.filter(predicate);
这意味着要循环两次原始列表。解决此问题的唯一方法是为过滤功能添加副作用:
let tmp = [];
B = B.filter(el => {
if (!predicate(el)) {
tmp.push(el);
return false;
} else return true;
});
A = A.concat(tmp);
但是看起来有点乱。我不认为filter
方法应该以这种方式使用。有更好的解决方案吗?
为什么不只是迭代将它分成两个临时数组?所以基本上,A上的'.each'迭代? – Cymen