Al realizar operaciones de matriz, a menudo se encuentra con el problema de eliminar los duplicados. La siguiente es una breve introducción al método de deduplicación de matrices.
índice de deduplicación
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"]Sin embargo, bajo IE6-8, el método índice de matriz aún no existe (aunque este es un tema un poco antiguo o (∩_∩) o ~), pero los programadores tienen que escribir un método índice de índice:
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() {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] .unique2 (); // [1, 2, 3, "4", 4, "34"]IndexOf también puede usar esta forma de reeconstrucción:
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"]Hash para recargar
El índice anterior es correcto, pero en términos de rendimiento, el doble ciclo reducirá el rendimiento. Entonces usamos hash.
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); hah [key] = 1;}} arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique4 (); // [1, 2, 3, "4", 4, "34"]El núcleo es construir un objeto hash para reemplazar el índice. Cambiar espacio a tiempo. Tenga en cuenta que en JavaScript, el valor clave de un objeto solo puede ser una cadena (por supuesto, ES6 proporciona una estructura de datos de mapa. Es similar a un objeto y también es una colección de pares de valores clave, pero el alcance de "clave" no está limitado a las cadenas. Todos los tipos de valores (incluidos los objetos) se pueden considerar como claves. que es una representación de estructura hash más completa), por lo que se necesita var key = typeof (item) + elemento para distinguir entre el valor 1 y la cadena '1'.
Entonces, si desea que '4' y 4 se consideren iguales (los otros enfoques son los mismos)
Array.prototype.unique5 = function () {var arr = []; var hash = {}; for (var i = 0, len = this.length; i <len; i ++) {if (! Hash [this [i]]) {arr.push (this [i]); hascu arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique5 (); // [1, 2, 3, "4", "34"]Después de clasificar, eliminar la repetición
Array.prototipo.unique6 = function () {this.sort (); var arr = [this [0]]; for (var i = 1; i <this.length; i ++) {if (this [i]! == arr [arr.lenggment-1]) {arr.push (this [i]);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique6 (); // [1, 2, 3, "34", "4", 4]Primero ordene la matriz, luego compare dos valores adyacentes. Al clasificar, use el método de clasificación JS Native, por lo que es muy rápido. Solo hay un inconveniente en este método. Al comparar personajes, se clasifican en el orden de la codificación de personajes. Entonces verá que 10 se clasifican primero en 2. Sin embargo, no afectará la eliminación de peso pesado. Sin embargo, para resolver el problema, el método de clasificación acepta un parámetro, que es un método:
función 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 (comparar); // [1, 2, 2, 3, 5, 10, 20]Establecido para recargar
ES6 proporciona un nuevo conjunto de estructura de datos. Es similar a una matriz, pero los valores de los miembros son todos únicos, sin valores duplicados. El navegador ahora es totalmente compatible y el nodo del servidor también es compatible.
Array.prototype.unique7 = function () {return array.from (nuevo conjunto (this));} [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique7 (); // [1, 2, 3, "4", 4, "34"]Biblioteca de métodos
Recomendado una biblioteca de métodos subscore.js, que es muy popular en el nodo o el navegador JS.
const _ = requirir ('subterráneo'); _. Uniq ([1, 2, 1, 3, 1, 4]); // [1, 2, 3, 4]Tiempo de prueba
Todos los métodos anteriores se pueden probar de una manera simple y luego comparar y seleccionar los mejores métodos:
console.time ("prueba"); [1,2,3, '4', 3,4,3,1, '34 ', 2] .unique7 (); console.timeend ("prueba"); ==> vm314: 3 prueba: 0.378msPara hacer los datos más grandes, cree 1 millón de números al azar:
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 ("prueba");Lo anterior es la deduplicación de la matriz JavaScript que el editor le presentó de lento a rápido de medio a simple. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!