2016-05-13 216 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)將返回iindexOf(e, i + 1)將返回第二元素的索引。
  2. 如果e是陣列中的兩個相同的元件的第二,indexOf(e)將返回第一個元素的索引,和indexOf(e, i + 1)將返回-1
  3. 如果e是一個唯一的元件,indexOf(e)將返回iindexOf(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];