2016-05-13 2 views
0

Я искал здесь и не нашел решения. Очевидно, меня исправит, если я ошибаюсь. То, что я пытаюсь сделать, это вернуть значения, которые не имеют дубликатов в массиве.Удалить все элементы с дубликатами в массиве Javascript

Примеры:

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

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

я разместил код, но я не был в состоянии понять это сам и только примеры кода, я нашел это для удаления дублированных значений ,

Возможное решение выше - не возвращать дубликаты ... Я пытаюсь вернуть значения, которые не имеют дубликатов.

+1

Возможный дубликат: http://stackoverflow.com/questions/1960473/unique-values-in-an-array – 42shadow42

+1

@ 42shadow42: Это не единственное, хотя; см. примеры –

+0

О, моя ошибка, вы хотите, чтобы все копии дубликата были удалены не всем, кроме одного, спасибо за исправление меня. – 42shadow42

ответ

4

Один из вариантов - использовать optional second argument to indexOf для поиска повторяющихся индексов. Учтите, что для данного элемента e и индекса i:

  1. , если e является первым из двух одинаковых элементов в массиве, indexOf(e) будет возвращать i и indexOf(e, i + 1) возвращают индекс второго элемента.
  2. , если e является вторым из двух одинаковых элементов в массиве, indexOf(e) возвращает индекс первого элемента, и indexOf(e, i + 1) будет возвращать -1
  3. , если e единственный элемент, indexOf(e) будет возвращать i и indexOf(e, i + 1) вернется -1 ,

Поэтому:

myArr.filter(function (e, i, a) { 
    return a.indexOf(e) === i && a.indexOf(e, i + 1) === -1 
}); 
2
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); 
+1

Это не работает. Проверьте параметры обратного вызова. – Bergi

+1

обновленный ответ с правильными параметрами обратного вызова –

0

Если не ассоциативный массив (ваш случай):

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

вар 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); 

Результат: [1,2,3];

Смежные вопросы