He buscado aquí y no he encontrado una solución. Obviamente seré corregido si me equivoco. Lo que intento hacer es devolver valores que no tienen duplicados en una matriz.

Ejemplos:

myArr = [2,1,2,3] // answer [1,3]

myArr = [3,1,2,2,3] // answer [1]

Publicaría algo de código, pero no he podido resolverlo yo mismo y los únicos ejemplos de código que he encontrado son para eliminar cualquier valor duplicado.

La posible solución anterior es no devolver duplicados ... Estoy tratando de devolver valores que no tienen duplicados.

0
Chuck Reynolds 14 may. 2016 a las 01:31

4 respuestas

La mejor respuesta

Una opción es usar el segundo argumento opcional para indexOf para encontrar índices duplicados. Considere eso para un elemento dado e y un índice i:

  1. si e es el primero de dos elementos idénticos en la matriz, indexOf(e) devolverá i y indexOf(e, i + 1) devolverá el índice del segundo elemento.
  2. si e es el segundo de dos elementos idénticos en la matriz, indexOf(e) devolverá el índice del primer elemento y indexOf(e, i + 1) devolverá -1
  3. si e es un elemento único, indexOf(e) devolverá i y indexOf(e, i + 1) devolverá -1.

Por lo tanto:

myArr.filter(function (e, i, a) {
  return a.indexOf(e) === i && a.indexOf(e, i + 1) === -1
});
4
Hamms 13 may. 2016 a las 22:42

Si no es una matriz asociativa (su caso):

var myArr = [1,2,2,3,4,4,1,5];
var myNewArr = [];

if (myArr.length > 0 )
{
    myNewArr[0] = myArr[myArr.length-1];    
}

var count = 1;

myArr.sort();

for (var i = myArr.length - 2; i >= 0; i--) {

    if(myArr[i] != myArr[i-1])
    {
        myNewArr[count] = myArr[i];
        count++;
    }
}
0
xpeiro 13 may. 2016 a las 23:09
var isUnique = function(v,i,arr){
   // return true if the first occurrence is the last occurrence 
   return ( arr.indexOf(v) === arr.lastIndexOf(v) ); 
};

var uniqueVals = myArr.filter(isUnique);

console.log( uniqueVals );
2
code_monk 13 may. 2016 a las 22:47

Var yourArray = [1, 2, 1, 3];

        var uniqueValues = [];
        $.each(yourArray, function (i, value) { //taking each 'value' from yourArray[]
            if ($.inArray(value, uniqueValues) === -1) { 
                 uniqueValues.push(value); // Pushing the non - duplicate value into the uniqueValues[] 
            }
        });            
        console.log(uniqueValues);

Resultado : [1,2,3];

0
Harsha pps 24 nov. 2016 a las 07:06