@kevinIsCoder 还可以简化一下
let arr=[1,1,1,2]
[...new Set(arr)]
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。function unique(array){
var n = [];//临时数组
for(var i = 0;i < array.length; i++){
if(n.indexOf(array[i]) == -1) n.push(array[i]);
}
return n;
}
ES6:
Array.from(new Set(arr));
var arr = [1,3,1,4,1,5,6,3,1,2];
Array.from(new Set(arr));//[1, 3, 4, 5, 6, 2]
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。利用对象字面量的key与value关联性,写起来比较简单,未测试性能,考虑到只遍历一次,速度应该很快。
function distinct(arr) {
var obj = {},
i = 0,
len = 0;
if (Array.isArray(arr) && arr.length > 0) {
len = arr.length;
for (i = 0; i < len; i += 1) {
obj[arr[i]] = arr[i];
}
return Object.keys(obj);
}
return [];
}
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。最快的方法是用jQuery:
var arr = ["1","2","3","4","5","4","3"];
var uniqueArr = [];
$.each(arr, function(i, el){
if($.inArray(el, uniqueArr) === -1) uniqueArr.push(el);
});
不用jQuery, 你可以先排序,然后遍历此Array, 比较前后两个元素的值.
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var sortedArr = arr.sort();
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
if (sortedArr[i + 1] == sortedArr[i]) {
results.push(sortedArr[i]);
}
}
alert(results);
你的不知道测试了没?
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var sortedArr = arr.sort();
console.log(sortedArr);
var results = [];
for (var i = 0; i < arr.length; i++) {
if (sortedArr[i + 1] !== sortedArr[i]) {
alert(i)
results.push(sortedArr[i]);
}
}
alert(results);
— jun_jun · 2016年09月08日
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。http://docs.closure-library.googlecode.com/git/closure_goog_array_array.js.source.html#line887
看看 closure 的去重代码吧。这个不错。
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。jQuery.unique( array );
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。Array.from(new Set(arr));
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。var arr = [1, 2, 3, "1", "a", "a", "3", 5, "2", "5", 1, 2, 3, 5];
function reDuplicates(arr) {
var newArr = [];
for(var i = 0, len = arr.length; i < len; i ++) {
for(var j = 0; j < newArr.length; j ++) {
var bol;
if(bol = ~function() {
if(arr[i] === newArr[j])
return -2;
return -1;
}())
break;
}
if(bol)
continue;
newArr.push(arr[i]);
}
return newArr;
}
console.log(arr);
console.log(reDuplicates(arr));
// [1, 2, 3, "1", "a", "a", "3", 5, "2", "5", 1, 2, 3, 5]
// [1, 2, 3, "1", "a", "3", 5, "2", "5"]
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。Array.prototype.unique = function() {
var res = []
var json = {}
for (var i = 0; i < this.length; i++) {
if(!json[this[i]]){ // 利用对象属性不重复
res.push(this[i])
json[this[i]] = 1 // 传值随意
}
}
return res
}
/*你就可以像下面这样调用该函数了*/
var arr = [2,4,66,55,33,55,3,4,4,32,2]
console.log(arr.unique())
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。包含NaN值得ES5写法,数组以及函数不会去重
function unique(array) {
var n = []
var nflag = false
for (var i = 0; i < array.length; i++) {
if (isNaN(array[i]) && !nflag && typeof array[i] == 'number') {
nflag = true
n.push(array[i])
}
if (n.indexOf(array[i]) === -1) {
if (!isNaN(array[i]) || typeof array[i] !== 'number') {
n.push(array[i])
}
}
}
return n;
}
**bold**
_italic_
[link](http://example.com)
> 引用
`code`
-
列表
。关闭理由: 删除理由: 忽略理由:
补充说明:
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
ES3? 你咋不上天呢?是不是还要兼容 IE6,7,8 呢?
— fuchao2012 · 2017年10月26日