我对此代码的期望是[1, 2, 5, 6, 7, 8, 9]
。结果是[7, 8, 9]
。我的错误在哪里? Jsfiddle for this。感谢。
var ar = [1, 2, 3, 4, 5, 6],
arWrapper = _(ar),
removedTypes = [3, 4],
addedTypes = [7, 8, 9];
_.each(removedTypes, function (removedType) {
arWrapper = arWrapper.remove(function (type) {
return type === removedType;
});
});
_.each(addedTypes, function (addedType) {
arWrapper = arWrapper.push(addedType);
});
console.log("%O", arWrapper.value());
答案 0 :(得分:2)
你的解决方案不是“惯用的”,因为它在这里和那里都依赖于自由变量(并且总体上“太必要”):
“更好”的解决方案是:
var result = arWrapper.difference(removedTypes).union(addedTypes);
JSFiddle:http://jsfiddle.net/xb90agw2/1/
从您的解决方案开始 - 它不起作用,因为.remove()
会返回已删除的元素的集合,而不是您假设的带有滤出元素的集合。