
Контекст
Как разработчик JavaScript, мы постоянно работаем с массивами, и иногда нам нужно найти пересечение нескольких массивов.
В этой статье мы рассмотрим лучший способ вернуть массив со всеми пересекающимися значениями между всеми предоставленными массивами без необходимости использования популярных библиотек, таких как Lodash или Underscore, просто полагаясь на метод reduce(). в сочетании с filter() и includes только лучшее из javascript в действии!
Применение
findIntersectingValues([[1, 2, 3], [1]]) // [1] findIntersectingValues([[1, 2, 3], [1, 2, 3]]) // [1, 2, 3] findIntersectingValues([[1, 2, 3], [1], [2]]) // [] findIntersectingValues([[1, 2, 3], [2], [2]]) // []
Как это работает
findIntersectingValues принимает массив массивов в качестве единственного аргумента, после чего функция работает в четыре простых шага:
- Метод reduce() используется для перебора каждого предоставленного массива.
- Для каждой итерации он сравнивает текущий массив с результатом, полученным на предыдущей итерации, используя метод filter(), создавая новый массив только со значениями, которые удовлетворяют заданному условию, в нашем случае условие обеспечивается:
- Метод includes(), проверяющий наличие значений в обоих массивах.
- Наконец, метод reduce() передает полученный массив на следующую итерацию, пока все массивы не будут сравнены.
Чтобы предоставить более конкретный пример, вот результат каждой итерации в этом случае:
const arrays = [ [1, 2, 3], [101, 2, 1, 10], [2, 1], ]; findIntersectionArray(arrays); // Final Output: [1, 2]
Примечание. Мы могли бы расширить эту функцию, чтобы сопоставлять объекты с любым сравнением, которое вы хотите, для примера давайте сравним все объекты следующим образом:
const findIntersectingValues = (arrays) => {
return arrays.reduce((current_array, next_array) => {
return current_array.filter((currentObj) => {
return next_array.some((nextObj) => {
// Compare objects based on their properties
return JSON.stringify(currentObj) === JSON.stringify(nextObj);
});
});
});
};
Заключение
Поиск пересечения массивов — распространенная задача в программировании, и есть несколько способов ее решения. В этой статье мы рассмотрели один из лучших способов вернуть массив, являющийся пересечением всех предоставленных массивов. Независимо от того, решите ли вы использовать стороннюю библиотеку или встроенные функции JavaScript, главное — писать лаконичный, читабельный и простой в обслуживании код.
Продолжайте в том же духе! 🧠
Первоначально опубликовано наhttps://blog.melvinvmegen.com/snippets/array-intersection 25 июня 2023 г.