如何使用Lodash高效移除数组1中存在于数组2的元素?
用Lodash高效移除数组中存在于另一数组的元素
嘿,这个需求Lodash真的有更顺手的工具!你提到的_.remove虽然能用,但确实有更简洁的方案,分两种场景给你说:
1. 不想修改原数组?用_.difference
这个方法会返回一个新数组,包含所有在第一个数组里但不在后续数组里的元素,完全不会改动原数组,非常适合需要保留原始数据的场景:
var array1 = ["user1","user2", "user3", "user4"]; var array2 = ["user1", "user3"]; // 得到新的结果数组,array1 保持原样 var filteredArray = _.difference(array1, array2); console.log(filteredArray); // 输出 ["user2", "user4"]
2. 要直接修改原数组?用_.pullAll
如果你就是想直接修改array1,那_.pullAll比_.remove更省心——它不需要你写回调函数判断元素是否在array2里,直接传入要移除的元素数组就行:
var array1 = ["user1","user2", "user3", "user4"]; var array2 = ["user1", "user3"]; // 直接修改array1本身 _.pullAll(array1, array2); console.log(array1); // 输出 ["user2", "user4"]
和_.remove的对比
如果用_.remove来实现,你得手动写判断逻辑,比如结合_.includes:
_.remove(array1, function(item) { return _.includes(array2, item); });
显然_.pullAll的写法更简洁,也更贴合你的需求——毕竟你的场景就是明确要移除另一数组里的所有元素,没必要额外写回调函数。
总结一下:
- 不需要修改原数组 → 用
_.difference,返回新数组,不改动原始数据 - 需要直接修改原数组 → 用
_.pullAll,代码更简洁,无需手动编写判断回调
这两个方法都是Lodash专门为这类集合差集场景设计的,比用_.remove更高效直观。
内容的提问来源于stack exchange,提问作者tj holwik
相关产品推荐
相关产品推荐

