我想知道两个或多个数组是否具有共同项目,但我不在乎这些项目是什么。我知道lodash有一个_.intersection
方法,但我不需要它来遍历每个数组中的每个项目。相反,我需要类似_.hasIntersection
方法的方法,它会在找到第一个常见事件时停止查找数组。 lodash有类似的东西吗?Lodash _.hasIntersection?
3
A
回答
2
这种方法可以让你有效地在数组中的任意数量的搜索的交集。
function hasIntersection() {
var collections = _.rest(arguments);
return _.some(_.first(arguments), function(item) {
return _(collections)
.chain()
.map(_.ary(_.partial(_.includes, item), 1))
.compact()
.size()
.isEqual(collections.length)
.value();
});
}
的hasIntersection()
功能通过创建collections
开始了,这些都是我们要寻找在交叉值的集合,减去第一个。它返回值some(),它使用first()数组参数迭代,回调到some()
比较传递给该函数的所有其他数组。
这是通过包装collections
并建立一个调用链来完成的。它使用chain()来启用显式链接,因为我们想在链的末尾链接isEqual()到size()。
我们将collections
变量(一组数组)映射到includes()函数。这会产生一个布尔值数组,这意味着其中一个集合中存在相交值。下一步是使用compact()删除错误的值。我们留下的是相交集合的数量。
如果相交集合的数量与collections
的长度相同,我们找到了一个跨所有集合相交的值,并且可以退出。这种做法是因为some()
和includes()
hasIntersection([ 1, 2 ], [ 2, 3 ]);
// → true
hasIntersection([ 1, 2, 3 ], [ 2, 4, 5 ], [ 2 ]);
// → true
hasIntersection([ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7, 8 ]);
// → false
2
相关问题
- 1. 从Lodash
- 2. 使用Javascript/Lodash
- 3. 检查与lodash
- 4. LoDash _.invokeMap()参数
- 5. 使用lodash
- 6. Lodash ORDERBY对象
- 7. Lodash groupBy订单
- 8. Lodash工会OBJECTID
- 9. lodash:一个._map
- 10. Lodash JSON阵列
- 11. Lodash深挑
- 12. 无法从lodash
- 13. LoDash for node.js
- 14. jQuery与lodash $ .map
- 15. 使用lodash
- 16. 使用Lodash _.find
- 17. JSLint和lodash
- 18. lodash dropWhile not working
- 19. Sequelize.Utils._?还是Lodash?
- 20. lodash:对象
- 21. 无法部署lodash
- 22. 如何使用lodash
- 23. 如何使用lodash
- 24. 如何通过Lodash
- 25. Javascript-Lodash shuffle vs. Math.Random()
- 26. Lodash等于功能
- 27. 如何使用lodash
- 28. 如何使用lodash
- 29. 组合Lodash方法
- 30. while循环与lodash
说回这几年以后的短路到位的高效,这似乎并没有工作了。看来'_.rest'需要一个函数。这是一个突破变化吗? – adam0101 2017-06-19 22:07:58
这演示了这个问题:https://plnkr.co/edit/njV7Q4mqI4VP1SHyNGjK?p=preview – adam0101 2017-06-19 22:18:05