数组去重的五种方法:
1.遍历数组法
function unique(array) {
var newArr = [];
for (var i = 0, len = array.length; i < len; i++) {
newArr.indexOf(array[i]) === -1 ? newArr.push(array[i]) : null;
}
return newArr;
}
2.数组下标判断法
function unique(array) {
var newArr = [array[0]],
i, len = array.length;
for (i = 1; i < len; i++) {
if (array.indexOf(array[i]) === i) {
newArr.push(array[i]);
}
}
return newArr;
}
3.排序后相邻去除法
function unique(array) {
array.sort();
var newArr = [array[0]];
for (var i = 1, len = array.length; i < len; i++) {
if (newArr[newArr.length - 1] !== array[i]) {
newArr.push(array[i]);
}
}
return newArr;
}
4.对象键值对法
以下两种方式实现原理相同,都是利用对象键值对来实现。
// 不改变原数组
// var arr =[1,3,”3”,4];
// obj -> {1:[“number”],3:[“number”,“string”],4:[“number”]}
function unique(array) {
var newArr = [],
obj = {},
i, len = array.length;
for (i = 0; i < len; i++) {
var cur = array[i];
var type = typeof cur;
if (obj[cur]) {
if (obj[cur].indexOf(type) < 0) {
obj[cur].push(type);
newArr.push(cur);
}
continue;
}
obj[cur] = [type];
newArr.push(cur);
}
return newArr;
}
// 改变原数组
// var arr =[1,3,”3”,4];
// obj -> {1:1,3:”3”,4:4};
function unique(array) {
var obj = {},
i;
for (i = 0; i < array.length; i++) {
var cur = array[i];
if (obj[cur] === cur) {
array[i] = array[array.length - 1];
array.length -= 1;
i -= 1;
continue;
}
obj[cur] = cur;
}
}
5.优化遍历数组法(双循环)
function unique(array) {
var i, j, len = array.length,newArr = [];
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (array[i] === array[j]) {
j = ++i;
}
}
newArr.push(array[i]);
}
return newArr;
}