Всегда ли массив будет отсортирован?
нет, но это может быть что-то, что нужно учитывать @ Thomas
Хорошо, это позволило бы что-то вроде этого:
Достаточно взглянуть на соседей, чтобы определить, является ли значение единичным или встречается несколько раз.
const array = [1,2,2,3,3,4,5];
const single = [];
const multiple = [];
for (let i = 0, length = array.length; i < length; ++i) {
let value = array[i];
const isDupe = i > 0 && value === array[i - 1]
|| i + 1 < length && value === array[i + 1];
if (isDupe) {
multiple.push(value);
} else {
single.push(value);
}
}
console.log("singles", single);
console.log("multiple", multiple);
Если данные не гарантированно отсортированы, нам нужно сначала выполнить подсчет, чтобы проверить, какие элементы уникальны в этом массиве, а какие нет. А на втором проходе мы можем добавить их в массивы результатов.
const array = [3, 2, 4, 2, 5, 1, 3];
const single = [];
const multiple = [];
const count = {};
for (let i = 0; i<array.length; ++i) {
let value = array[i];
count[value] = (count[value] || 0) + 1;
}
for (let i = 0; i<array.length; ++i) {
let value = array[i];
if (count[value] > 1) {
multiple.push(value);
} else {
single.push(value);
}
}
console.log("singles", single);
console.log("multiple", multiple);