Ниже представлен массив продуктов, который находил и обрабатывал контактные данные и создавал возможный массив случаев слияния. В следующем arrProduct я хотел бы фильтровать повторяющийся массив и объединиться с существующим массивом и, наконец, создать уникальный продукт массива, называемый arrFinalProduct.
Массивный продукт
arrProduct =
[
[ 0 ],
[ 1, 2 ],
[ 2 ],
[ 3 ],
[ 4, 5, 6, 10 ],
[ 5, 6, 7, 11 ],
[ 6 ],
[ 7, 11 ],
[ 8 ],
[ 9 ],
[ 10 ],
[ 11 ],
[ 12 ],
[ 13, 14 ],
[ 14 ]
]
Конечный продукт
arrFinalProduct =
[
[ 0 ],
[ 1, 2 ],
[ 3 ],
[ 4, 5, 6, 7, 10, 11 ],
[ 8 ],
[ 9 ],
[ 12 ],
[ 13, 14 ]
]
arrProduct - это массив продуктов, а arrFinalProduct - это конечный массив продуктов. Основная логика заключается в том, что нам требуется слияние массива, если любые совпадения встречаются из массива.
Скажем, значение 0 не найдено ни в одном индексе в arrProduct, чтобы оно не сливалось и не впадало в arrFinalProduct, значение arrProduct 2 находилось на 1-м и 2-м индексах, чтобы оно могло слиться с 1-м индексом и стать [1,2] и удалить третий индекс из [2]. arrProduct index 5 имеет два общих значения 5 и 6, а также в индексе 6, чтобы он мог слиться в 1 и стать "4,5,6,7" и так далее...
Этот процесс будет обрабатывать данные рекурсивно, пока не найду уникальное значение из массива. Поэтому он, вероятно, объединяет массив по горизонтали.
Надежды читателя могут получить достаточно идеи.
В основном вы можете искать искомые элементы в результирующем наборе и присоединяться к массивам с одинаковыми элементами.
Порядок элементов такой же, как и внешний вид.
var array = [[0], [1, 2], [2], [3], [4, 5, 6, 10], [5, 6, 7, 11], [6], [7, 11], [8], [9], [10], [11], [12], [13, 14], [14]],
result = array.reduce(function (r, a) {
r.some(function (b, i, bb) {
if (a.some(c => b.includes(c))) {
bb[i] = [...new Set(b.concat(a))];
return true;
}
}) || r.push(a);
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }