第一种情况: 数组类型为数组对象,如果对象里面的每个属性值都相等则去掉,如果只是部分的属性相同,则不去掉
var cat = [
{name : "aaa",age : 20},
{name : 'aaa',age : 30},
{name : 'bbb',age : 40},
{name : 'aaa',age : 30}
];
//第一项和第四项相同,去掉第四项
Array.prototype.unique = function (arr) {
var res = [arr[0]];
for(var i=1;i<arr.length;i++){
var flag = false;
for (var j=0;j<res.length;j++){
if(arr[i].name == res[j].name && arr[i].age == res[j].age){
flag = true;
break;
}
}
if(!flag){
res.push(arr[i]);
}
}
return res;
};
console.log(cat.unique(cat));
第二种情况 : 数组类型,只是基本的数组类型
var arr = [1,2,5,2,4,6,1];
Array.prototype.unique = function () {
var res = [this[0]];
for(var i=1;i<this.length;i++){
var flag = false;
for (var j = 0;j<res.length;j++){
if(this[i] == res[j]){
flag = true;
break;
}
}
if(!flag){
res.push(this[i]);
}
}
return res;
}
console.log(arr.unique());
最简单的一种数组去重
function unique1(arr) {
var newArr = [];
for(var i = 0 ; i < arr.length ; i++){
var item = arr[i];
if(newArr.indexOf(item) == -1) newArr.push(item);
}
return newArr;
}
利用对象的键名不能重复的原理去除数组对象里重复的项
var songs = [
{name:"羽根",artist:"air"},
{name:"羽根",artist:"air"},
{name:"晴天",artist:"周杰伦"},
{name:"晴天",artist:"周杰伦"},
{artist:"周杰伦",name:"晴天"}
];
第一步去掉重复的项
var obj = {}
var finalResult = []
for(var i = 0 ; i < songs.length ; i++){
obj[songs[i].name] = songs[i]
}
此时输出的结果是
// {"羽根":{name:"羽根",artist:"air"},"晴天":{name:"晴天",artist:"周杰伦"}}
取出这个结果里面的键值
for(var item in obj){
finalResult.push(obj[item])
}
console.log(finalResult);[{name:"羽根",artist:"air"},{name:"晴天",artist:"周杰伦"}]
ES6数组去重,基本的数组类型
var test = [1,2,3,4,1]
function unique(arr){ // se6语法只能去除简单的数组类型的重复数据
return Array.from(new Set(arr));
}