关键词:数组去重
方法
声明一个数组
* var arr = [1,3,"a",4,45,4,5,5,5,23,35,6,2,2,"a","b","b","c"];
用原型写个方法
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;
}
console.log(arr.unique());
我们把上面的写法倒过来写一遍
Array.prototype.unique = function(){
var obj = {};
var newArr = [];
for(var i =this.length-1;i>=0;i--){
obj[this[i]] = ""; // 利用对象属性的唯一性
}
// console.log(obj);
for(var item in obj){
newArr.push(item)
}
return newArr.reverse();
}
console.log(arr.unique());
把上面的方法简化一下
Array.prototype.unique = function(){
var obj = {};
var newArr = [];
for(var i =this.length-1;i>=0;i--){
if(obj[this[i]] == undefined || obj[this[i] != this[i]]){
obj[this[i]] = ""; // 利用对象属性的唯一性
newArr.push(this[i]);
}
}
return newArr.reverse();
}
console.log(arr.unique());
下面我们来看看毁天灭地的正则表达式怎么写
// 正则表达式
Array.prototype.unique = function(){
return this.join(',').match(/([^,]+)(?!.\1)/ig);
}
console.log(arr.unique());
简直残暴!!!
在这里附上一个 在线正则测试工具
其他常用方法
想想还是附上吧
Array.prototype.unique = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'c', d', 'e', 1, 0]
alert(arr.unique());
利用了两个for循环,这种写法效率低,下一种写法效率要高一些
Array.prototype.unique = function(){
this.sort(); //先排序
var res = [this[0]];
for(var i = 1; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique());
正式结束!