БлогNot. Функция array_unique на Javascript?

Функция array_unique на Javascript?

В яваскрипте нет готовой функции вроде array_unique из PHP, оставляющей в массиве только уникальные элементы. Вроде бы, несложно написать такое "в лоб":

function unique(arr) {
  let result = [];
  for (let str of arr) {
   if (!result.includes(str)) result.push(str);
  }
  return result;
}

Но includes - это полный проход по массиву, таким образом, получается временная сложность O(N2), да и выглядит код страшновато.

Куда лучше так, с применением встроенного в язык Set:

function unique (arr) {
 return Array.from(new Set(arr));
}

Протестируем оба кода таким образом:

Файл 1.html
<script>
function unique(arr) {
  let result = [];
  for (let str of arr) {
   if (!result.includes(str)) result.push(str);
  }
  return result;
}
var arr = [];
for (var i = 0; i < 10000; i++) arr.push(i%100);
console.time('1');
arr = unique(arr);
console.timeEnd('1');
</script>
Файл 2.html
<script>
function unique (arr) {
 return Array.from(new Set(arr));
}
var arr = [];
for (var i = 0; i < 10000; i++) arr.push(i%100);
console.time('2');
arr=unique(arr);
console.timeEnd('2');
</script>

Второй код почти в 10 раз быстрее.

Чтобы увидеть, что JavaScript выводит в консоль, нажмите комбинацию клавиш, зависящую от браузера (имеются в виду новые версии всех браузеров):

  • Ctrl + Shift + J в Google Chrome и Opera;
  • Ctrl + Shift + K в Firefox;
  • F12 в Internet Explorer (в версии 11 ещё не работают "let str of" и "Array.from")

Кстати, заодно можете и время выполнения в разных браузерах сравнить.


теги: время javascript тест браузеры

11.11.2019, 15:01; рейтинг: 78