我想知道兩個或多個數組是否具有共同項目,但我不在乎這些項目是什麼。我知道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