При выполнении операций массива вы часто сталкиваетесь с проблемой удаления дубликатов. Ниже приведено краткое введение в метод дедупликации массивов.
Индекс дедупликации
Array.prototype.unique1 = function () {var arr = []; for (var i = 0; i <this.length; i ++) {var item = this [i]; if (arr.indexof (item) === -1) {arr.push (item);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique1 (); // [1, 2, 3, "4", 4, "34"]Однако в соответствии с IE6-8 метод массива индекса еще не существует (хотя это немного старая тема o (∩_∩) o ~), но программисты должны написать метод индекса:
var indexof = [] .indexof? function (arr, item) {return arr.indexof (item);}: function indexof (arr, item) {for (var i = 0; i <arr.length; i ++) {if (arr [i] === item) {return i;}} return -1;} array.prototype.unique2 = function () {arr arr =; i ++) {var item = this [i]; if (arr.indexof (item) === -1) {arr.push (item);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique2 (); // [1, 2, 3, "4", 4, "34"]Индекс также может использовать этот способ повторной реконструкции:
Array.prototype.unique3 = function () {var arr = [this [0]]; for (var i = 1; i <this.length; i ++) {if (this.indexof (this [i]) == i) {arr.push (this [i]);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique3 (); // [1, 2, 3, "4", 4, "34"]Хэш для перезагрузки
Приведенный выше индекс является правильным, но с точки зрения производительности двойной цикл снизит производительность. Тогда мы используем хэш.
Array.prototype.unique4 = function () {var arr = []; var hash = {}; for (var i = 0; i <this.length; i ++) {var item = this [i]; var key = typeof (item)+itemif (hash [key]! == 1) {arr.push (item); arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique4 (); // [1, 2, 3, "4", 4, "34"]Ядро состоит в том, чтобы создать хэш -объект для замены индекса. Измените место на время. Note that in JavaScript, the key value of an object can only be a string (of course, ES6 provides a Map data structure. It is similar to an object and is also a collection of key-value pairs, but the scope of "key" is not limited to strings. All types of values (including objects) can be regarded as keys. In other words, the Object structure provides a "string-value" correspondence, and the Map structure provides a "value-value" correspondence, which is a Более полное представление хэш -структуры.), поэтому var key = typeof (элемент) + элемент необходим для различения значения 1 и строки «1».
Тогда, если вы хотите, чтобы «4» и 4 считались такими же (другие подходы одинаковы)
Array.prototype.unique5 = function () {var arr = []; var hash = {}; for (var i = 0, len = this.length; i <len; i ++) {if (! Hash [this [i]]) {arr.push (это [i]); arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique5 (); // [1, 2, 3, "4", "34"]После сортировки, De-Repeat
Array.prototype.unique6 = function () {this.sort (); var arr = [this [0]]; for (var i = 1; i <this.length; i ++) {if (this [i]! == arr [arr.length-1]) {arr.push (this [i]);} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique6 (); // [1, 2, 3, "34", "4", 4]Сначала сортируйте массив, затем сравните два смежных значения. При сортировке используйте метод Native Sort JS, так что он очень быстро. В этом методе есть только один недостаток. При сравнении персонажей они отсортированы в порядке кодирования персонажа. Таким образом, вы увидите, что 10 ранжируется первым по 2. Однако это не повлияет на удаление тяжелого веса. Однако, чтобы решить проблему, метод сорта принимает параметр, который является методом:
Функция Compare (value1, value2) {if (value1 <value2) {return -1;} else if (value1> value2) {return 1;} else {return 0;}} [1,2,5,2,10,3,20] .sort (compare); // [1, 2, 2, 3, 5, 10, 20]Установить для перезагрузки
ES6 предоставляет новый набор структуры данных. Это похоже на массив, но все значения участников уникальны, без дублирования. Браузер теперь полностью поддерживается, а узел сервера также поддерживается.
Array.prototype.unique7 = function () {return array.from (new set (this));} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique7 (); // [1, 2, 3, "4", 4, "34"]Библиотека методов
Рекомендованная библиотека методов подчеркивает.
const _ = require ('Underscore'); _. Uniq ([1, 2, 1, 3, 1, 4]); // [1, 2, 3, 4]Время испытания
Все вышеперечисленные методы могут быть протестированы простым способом, а затем сравнить и выбрать лучшие методы:
Консоль
Чтобы сделать данные больше, создайте 1 миллион чисел случайным образом:
var arr = []; var num = 0; for (var i = 0; i <1000000; i ++) {num = math.floor (math.random ()*100); arr.push (num);} console.time ("test"); arr.Unique7 (); console.Timeend ("test");Выше приведено дедупликация массива JavaScript, которую редактор представил вам от медленного до быстрого от среднего до простого. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!