2016-05-13 218 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];