Delete duplicate elements from an array
本问题已经有最佳答案,请猛点这里访问。
例如,我有一个这样的数组;
1 | var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10] |
我的目的是丢弃数组中的重复元素,得到这样的最终数组;
1 | var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
如何在JavaScript中实现这一点?
注意:数组没有排序,值可以是任意顺序。
使用
1 2 3 | var unique = arr.filter(function(elem, index, self) { return index === self.indexOf(elem); }) |
由于元素尚未排序,您不必构建地图,有一个快速的解决方案:
1 2 3 4 | var newarr = [arr[0]]; for (var i=1; i<arr.length; i++) { if (arr[i]!=arr[i-1]) newarr.push(arr[i]); } |
编辑:如果数组未排序,请使用映射:
1 2 3 4 5 6 7 8 9 10 11 | var newarr = (function(arr){ var m = {}, newarr = [] for (var i=0; i<arr.length; i++) { var v = arr[i]; if (!m[v]) { newarr.push(v); m[v]=true; } } return newarr; })(arr); |
请注意,到目前为止,这比公认的答案快得多。
1 2 3 4 5 6 7 8 9 10 11 12 13 | var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10]; function squash(arr){ var tmp = []; for(var i = 0; i < arr.length; i++){ if(tmp.indexOf(arr[i]) == -1){ tmp.push(arr[i]); } } return tmp; } console.log(squash(arr)); |
工作示例http://jsfiddle.net/7utn7/
旧浏览器上indexof的兼容性
您可以使用jquery尝试这样做
1 2 3 4 5 | var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10]; var uniqueVals = []; $.each(arr, function(i, el){ if($.inArray(el, uniqueVals) === -1) uniqueVals.push(el); }); |
尝试从数组中删除重复项(简单):
1 2 3 4 5 6 7 8 9 | Array.prototype.removeDuplicates = function (){ var temp=new Array(); this.sort(); for(i=0;i<this.length;i++){ if(this[i]==this[i+1]) {continue} temp[temp.length]=this[i]; } return temp; } |
编辑:
此代码不需要排序:
1 2 3 4 5 6 7 8 9 10 11 | Array.prototype.removeDuplicates = function (){ var temp=new Array(); label:for(i=0;i<this.length;i++){ for(var j=0; j<temp.length;j++ ){//check duplicates if(temp[j]==this[i])//skip if already present continue label; } temp[temp.length] = this[i]; } return temp; } |
(但不是测试代码!)