Массив уникальных значений (JavaScript)

Чтобы в ДжаваСкрипте получить массив состоящий из уникальных значений, то самый простой вариант — отсортировать массив и обратным перебором проверять текущий и предшествующий значения, и, если они равны, удалить текущий.

Пример

Например у нас есть числовой массив, задача удалить повторяющиеся значения.

// исходный массив var arr = [1, 2, 3, 4, 5, 6, 1, 3, 5, 7, 2, 4, 6, 8, 9, 10, 11, 13, 15, 10, 4, 7, 9, 4, 2]; console.log(arr); // [1, 2, 3, 4, 5, 6, 1, 3, 5, 7, 2, 4, 6, 8, 9, 10, 11, 13, 15, 10, 4, 7, 9, 4, 2] var i = arr.length; arr.sort(); while (i--) { if (arr[i] == arr[i-1]) { arr.splice(i, 1); } } console.log(arr); // [1, 10, 11, 13, 15, 2, 3, 4, 5, 6, 7, 8, 9]

Категории

ПрограммированиеJavaScriptМассивыМассивы в JavaScript

Комментарии

Артём Фёдоров

Предлагаю написать статью на эту тему, читателям будет интересно.

Ответить
Юра Романов

Методы .sort и .splice как бы тоже используют циклы. Вообще,.splice медленный; после сортировки лучше сдвинуть уникальные элементы в начало массива и обрезать его
arr.sort();
for (var i = 1, j = 1, n = arr.length; i < n; i++)
{ if (arr[i] !== arr[j-1]) arr[j++] = arr[i]; }
arr.length = j;

Ответить
Артём Фёдоров

Порядок нарушается, да. Зато одним циклом.

Ответить
Юра Романов

Не совсем корректное решение: не сохраняется порядок следования элементов. Лучше так
function getUnique(A)
{
var n = A.length, k = 0, B = [];

for (var i = 0; i < n; i++)
{ var j = 0;
while (j < k && B[j] !== A[i]) j++;
if (j == k) B[k++] = A[i];
}

return B;
}

Ответить