Lodash懒人链对我不起作用

时间:2015-04-06 22:29:10

标签: javascript lodash

我对此代码的期望是[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());

1 个答案:

答案 0 :(得分:2)

你的解决方案不是“惯用的”,因为它在这里和那里都依赖于自由变量(并且总体上“太必要”):

“更好”的解决方案是:

var result = arWrapper.difference(removedTypes).union(addedTypes);

JSFiddle:http://jsfiddle.net/xb90agw2/1/

从您的解决方案开始 - 它不起作用,因为.remove()会返回已删除的元素的集合,而不是您假设的带有滤出元素的集合。