Obtener todos los valores únicos de matriz de JavaScript (duplicados quitar)

Esta traducción de: la Obtener valores Todo Un único en JavaScript Array (al eliminar duplicados)

Tengo una serie de números que yo necesito para asegurarse de que son únicos. Me necesidad de identificar una gama única de números. He encontrado el siguiente fragmento de código en el Internet y funciona muy bien hasta que la matriz tiene un cero en él. He encontrado el siguiente fragmento de código en Internet, y contiene cero antes de que funcione correctamente en la matriz. Encontrado el I del presente otro script aquí Papel pintado casi de manera que se ve exactamente igual, pero no falla. Me encontraron en el SO otro script , ve casi exactamente lo mismo, pero no va a fallar.

Así que por el bien de ayudar a aprender , alguien puede ayudarme a determinar donde el guión prototipo va mal? Así que para ayudar a aprender, alguien puede ayudar a determinar la escritura prototipo de lo que es el problema?

Array.prototype.getUnique = function() {
 var o = {}, a = [], i, e;
 for (i = 0; e = this[i]; i++) {o[e] = 1};
 for (e in o) {a.push (e)};
 return a;
}

Más respuestas de la pregunta duplicado: más respuestas de las preguntas repetidas:

pregunta similar: pregunta similar:


# 1 planta

Referencia: https://stackoom.com/question/8E0X/ toda la adquisición de valor única matriz de JavaScript - duplicados remove


Casa # 2

También puede hacer uso por Usted Underscore.js . También puede utilizar Underscore.js .

 console.log(_.uniq([1, 2, 1, 3, 1, 4])); 
 <script src="http://underscorejs.org/underscore-min.js"></script> 

que devolverá: devuelve:

[1, 2, 3, 4]

Casa # 3

ya que he encontrado un buen método que utiliza jQuery , desde entonces, he encontrado una buena manera de utilizar jQuery

arr = $.grep(arr, function(v, k){
    return $.inArray(v ,arr) === k;
});

Nota: Este código fue retirado de perforación pato de Pablo irlandesa de POST - I, Ltd Forgot para dar crédito a: P Nota: Este código es de Paul Irish mensajes perforadas pato extracto de - Se me olvidó darle el agradecimiento: P


# 4 piso

Prototipo del este getUniqueno es el totalmente correcto, porque si tienen tienen como Array A: ["1",1,2,3,4,1,"foo"]TI por el regreso de Will ["1","2","3","4"]y "1"IS y la cadena 1es un entero; este prototipo getUniqueno es del todo correcta, porque si tengo un array matriz es similar: ["1",1,2,3,4,1,"foo"]se devuelve ["1","2","3","4"]y "1"una cadena , 1es un número entero; que son diferentes. ellos no son los mismos.

Aquí es una solución correcta: Esta es la solución correcta:

Array.prototype.unique = function(a){
    return function(){ return this.filter(a) }
}(function(a,b,c){ return c.indexOf(a,b+1) < 0 });

usando: Uso:

var foo;
foo = ["1",1,2,3,4,1,"foo"];
foo.unique();

Por encima de Will producir al ["1",2,3,4,1,"foo"]. Anteriormente producirá ["1",2,3,4,1,"foo"].


Casa # 5

El De Shamasis Bhattacharya 'Blog S (O (2n) Complejidad de tiempo): desde Shamasis Bhattacharya el blog (O (2n) Tiempo de complejidad):

Array.prototype.unique = function() {
    var o = {}, i, l = this.length, r = [];
    for(i=0; i<l;i+=1) o[this[i]] = this[i];
    for(i in o) r.push(o[i]);
    return r;
};

El De Paul Irish 'S Blog : Mejora en jQuery .unique(): de Paul Irish blog es : JQuery .unique()mejoras:

(function($){

    var _old = $.unique;

    $.unique = function(arr){

        // do the default behavior only if we got an array of elements
        if (!!arr[0].nodeType){
            return _old.apply(this,arguments);
        } else {
            // reduce the array to contain no dupes via grep/inArray
            return $.grep(arr,function(v,k){
                return $.inArray(v,arr) === k;
            });
        }
    };
})(jQuery);

// in use..
var arr = ['first',7,true,2,7,true,'last','last'];
$.unique(arr); // ["first", 7, true, 2, "last"]

var arr = [1,2,3,4,5,4,3,2,1];
$.unique(arr); // [1, 2, 3, 4, 5]

Casa # 6

Con JavaScript 1.6 / ECMAScript 5 que puede utilizar en The Native filterMétodo, de una matriz efectúa en la siguiente forma de obtener una matriz con valores únicos: el uso de JavaScript 1.6 / ECMAScript 5, la máquina que puede utilizar la matriz por medio de filtermétodos para obtener un valor único matriz:

function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter( onlyUnique ); // returns ['a', 1, 2, '1']

Método nativa, en The filterWill en The Loop matriz ya través de la Dejar Esas entradas Sólo DADO que pasan a la función de devolución de llamada onlyUnique. Método nativo filteritera a través de la matriz, manteniendo sólo aquellos dados a la función de devolución de llamada onlyUnique.

onlyUniquecheques, si el valor dado es la primera que se produzcan. onlyUniqueCompruebe si un valor dado es la primera ocurrencia. Si no es así, debe ser un duplicado y no será copiado. Si no es así, hay que repetirlo y no se copiará.

Esta solución funciona sin ningún tipo de biblioteca extra, como jQuery o prototype.js. Esta solución no requiere ninguna biblioteca adicionales (como jQuery o prototype.js) para trabajar.

Funciona para matrices con tipos de valores mixtos también. También es aplicable a una variedad tipos de valor mixtos.

El For Old los navegadores (<IE9), que no soportan a los métodos nativos filtery indexOfusted PUEDE los rodeos encontrar trabajo en la documentación MDN de filtro y indexOf . Para los navegadores antiguos (<IE9), no es compatible con el método de nativos filtery indexOfse pueden encontrar MDN documento modificaciones de filtro y indexOf .

¿Quieres tener a la SI última aparición de un valor, el reemplazar el simple indexOfpor lastIndexOf. Si desea mantener el valor de la última aparición, simplemente indexOfreemplazado lastIndexOf.

Con ES6 se podría acortar a este : Uso ES6 puede simplificarse a:

// usage example:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter((v, i, a) => a.indexOf(v) === i); 

// unique is ['a', 1, 2, '1']

Gracias a Camilo Martin para la pista en el comentario. Gracias Camilo Martin 's comentarios pronta.

Objeto nativa A tiene para ES6 Seta los valores de tienda único. Para ES6 un objeto nativo Setse utiliza para almacenar un valor único. Para obtener una matriz con valores únicos que podría hacer ahora esto: Para obtener una matriz con valores únicos, ahora se puede hacer lo siguiente:

var myArray = ['a', 1, 'a', 2, '1'];

let unique = [...new Set(myArray)]; 

// unique is ['a', 1, 2, '1']

De constructor de la Settoma un Iterable objeto, como la matriz, y difundir el operador de ...Transformada La matriz de conjuntos de nuevo en AN. SetConstructor usando el objeto (por ejemplo Array) un proceso iterativo y distribuir operador ...de conjunto convertido matriz de espalda. Para gracias Lukas Liese de pista en el comentario. Gracias Lukas Liese comenta pronta.

Artículos originales publicados 0 · ganado elogios 136 · vistas 830 000 +

Supongo que te gusta

Origin blog.csdn.net/xfxf996/article/details/105245147
Recomendado
Clasificación