双重循环去重
这种方法是常规思维下的产物,其易理解,思路顺,但是其时间复杂度高,不建议使用
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var result = [arr[0]];
for(var i = 1, l = arr.length; i < l; i += 1) {
for(var j = 1, m = arr.length; j < m; j += 1) {
if(arr[i] === result[j]) {
break;
} else {
result.push(arr[i]);
}
}
}
return result;
}
indexOf 去重
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var result = [];
for(var i = 1, l = arr.length; i < l; i += 1) {
if(result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
return result;
}
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
return Array.prototype.filter.call(arr, function(item, index){
return arr.indexOf(item) === index;
});
// let result = [];
// for(var i = 1, l = arr.length; i < l; i += 1) {
// if(result.indexOf(arr[i]) !== i) {
// result.push(arr[i]);
// }
// }
// return result;
}
排序去重
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var newArr = arr.sort()
var result = [arr[0]];
for(var i = 1, l = newArr.length; i < l; i += 1) {
if(arr[i] !== arr[i-1]) {
result.push(arr[i]);
}
}
return result;
}
利用对象属性去重
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var result = [];
var obj = {};
for(var i = 1, l = arr.length; i < l; i += 1) {
if(!obj[arr[i]]) {
result.push(arr[i]);
obj[arr[i]] = 1;
} else {
obj[arr[i]] += 1;
}
}
return result;
}
set 与解构去重
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var result = [...new Set(arr)]
return result;
}
set 和 Array.from() 去重
function unique(arr) {
if(!Array.isArray(arr)) {
return;
}
var result = Array.from(new Set(arr))
return result;
}