Set (ES6)
let newArr = [...new Set(arr)]
数组filter
const arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
const newArr = arr.filter(function(ele, index, array) {
return index === array.indexOf(ele)
});
console.log(newArr); // [ 1, 2, 3, 4, 'l' ]
数组indexOf
var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
Array.prototype.unique2 = function() {
var newArr = [];
var len = this.length;
for(var i = 0; i < len; i++) {
var cur = this[i];
if(newArr.indexOf(cur) === -1) {
newArr[newArr.length] = cur;
}
}
return newArr;
}
console.log(arr.unique2()); // (5) [1, 2, 3, 4, "l"]
利用普通对象object去重(对象中key名不能有重复的)
Array.prototype.unique3 = function() {
var newArr = this.slice(0);
var len = this.length;
var obj = {};
for(var i = 0; i < len; i++) {
var cur = newArr[i];
if(obj[cur]) {
newArr[i] = newArr[newArr.length - 1];
newArr.length--;
i--;
continue;
}
obj[cur] = cur;
}
return newArr;
}
console.log(arr.unique3()); // (5) [1, 2, "l", 3, 4]
var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
// 利用对象另种处理方式
Array.prototype.unique4 = function() {
var json = {}
var newArr = []
var len = this.length
for(var i = 0; i < len; i++) {
var cur = this[i];
if (typeof json[cur] === 'undefined') {
json[cur] = true;
newArr.push(cur)
}
}
return newArr;
}
var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
console.log(arr.unique4()); // (5) [1, 2, 3, 4, "l"]
双循环去重
Array.prototype.distinct1 = function () {
var arr = this
for (var i = 0; i < arr.length - 1; i++) {
var cur = arr[i]
for (var j = i + 1; j < arr.length;) {
cur === arr[j] ? arr.splice(j, 1) : j++
}
}
return arr;
}
var arr = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]
console.log(arr.distinct1()) // (4) [1, 2, 3, 4]
/*
*
* 还是得调用“indexOf”性能跟方法1差不多,
* 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
* 那么表示第i项是重复的,忽略掉。否则存入结果数组。
* */
function uniq(array){
var temp = [];
for(var i = 0; i < array.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
if(array.indexOf(array[i]) == i){
temp.push(array[i])
}
}
return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));
var obj = {}
var ary = []
for (var i = 0; i < arr.length; i++) {
var cur = arr[i]
if (!obj[cur]) {
obj[cur] = true
ary.push(cur)
}
}
obj = null
var arr = [1, 1, 2, 3, 2]
var ary = []
for (var i = 0; i < arr.length; i++) {
var cur = arr[i]
if (ary.indexOf(cur) === -1) {
ary.push(cur)
}
}
function unique(arr) {
// [1, 1, 1, 2, 2, 2]
arr = arr.slice(0) // 完全克隆一个新数组
for (var i = 0; i < arr.length; i++) {
var cur = arr[i]
for (var j = i + 1; j < arr.length;) {
cur === arr[j] ? arr.splice(j, 1) : j++
}
}
return arr
}
----------------------------------------------------------------------------------------------------------------
参考文章&&强烈推荐:布罗利