Как найти общие и различные значения в двух массивах?
Имеется два числовых массива:
const array1 = [3, 3, 2, 2, 2];
const array2 = [5, 3, 2];
Нужно вывести массив из общих элементов:
const resGen = [3, 2];
И массив всех других элементов, которые не вошли в resGen:
const resDiff = [5, 3, 2, 2];
Как это проще всего реализовать?
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Ответ можно найти так
let array1 = [3,3,2,2,2];
let array2 = [5,3,2];
let copyArray1 = [...array1];
let copyArray2 = [...array2];
let result = [...array1, ...array2].reduce((acc, item) => {
if (copyArray1.includes(item) && copyArray2.includes(item)) {
delete copyArray1[copyArray1.indexOf(item)];
delete copyArray2[copyArray2.indexOf(item)];
acc.intersection.push(item);
} else if (copyArray1.includes(item)) {
delete copyArray1[copyArray1.indexOf(item)];
acc.difference.push(item);
} else if (copyArray2.includes(item)) {
delete copyArray2[copyArray2.indexOf(item)];
acc.difference.push(item);
}
return acc;
}, {difference: [], intersection: []});
console.log(result);
Автор решения: Vasily
→ Ссылка
Можно сделать так:
const array1 = [3, 3, 2, 2, 2]
const array2 = [5, 3, 2]
const resGen = []
const resTemp = []
const tempArr2 = [...array2]
array1.forEach(item => {
if (tempArr2.includes(item)) {
resGen.push(item)
tempArr2.splice(tempArr2.indexOf(item), 1)
} else {
resTemp.push(item)
}
})
const restDiff = [...tempArr2, ...resTemp]
console.log(resGen, restDiff)
// [ 3, 2 ] [ 5, 3, 2, 2 ]