indexOf去重
unique(arr) {
if (!Array.isArray(arr)) {
console.log("不是数组");
return;
}
let array = [];
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i]);
}
}
return array;
},
getArr() {
var arr = [1, 1, "true", "true", true, true, 15, 15];
console.log(this.unique(arr));
// [1, "true", true, 15]
//无法去重 NaN、{}
},
ES6 Set去重
unique (arr) {
return Array.from(new Set(arr))
},
getArr() {
var arr = [1, 1, "true", "true", true, true, 15, 15];
console.log(this.unique(arr));
// [1, "true", true, 15]
},
for嵌套for,然后splice去重
unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}
return arr;
},
getArr() {
var arr = [1, 1, "true", "true", true, true, 15, 15];
console.log(this.unique(arr));
// [1, "true", true, 15]
},
[...new Set(arr)]
getArr() {
var arr = [1, 1, "true", "true", true, true, 15, 15];
console.log([...new Set(arr)] );
// [1, "true", true, 15]
},
根据对象里的id去重
let json1=[
{id:1,name:"aaa"},
{id:2,name:"bbb"},
{id:3,name:"ccc"},
]
let json2=[
{id:1,name:"aaa"},
{id:2,name:"bbb"},
{id:4,name:"ddd"},
]
let json = json1.concat(json2); //两个数组对象合并
let newJson = []; //盛放去重后数据的新数组
for(item1 of json){ //循环json数组对象的内容
let flag = true; //建立标记,判断数据是否重复,true为不重复
for(item2 of newJson){ //循环新数组的内容
if(item1.id==item2.id){ //让json数组对象的内容与新数组的内容作比较,相同的话,改变标记为false
flag = false;
}
}
if(flag){ //判断是否重复
newJson.push(item1); //不重复的放入新数组。 新数组的内容会继续进行上边的循环。
}
}
console.log("newJson",newJson);
判断两个数组增加和减少的元素
compare(beforeArr,afterArr){
let resObj = {
add : [],
del : []
},
cenObj = {};
//把beforeArr数组去重放入cenObj
for(let i=0;i<beforeArr.length;i++){
cenObj[beforeArr[i]] = beforeArr[i];
}
//遍历afterArr,查看其元素是否在cenObj中
for (let j=0;j<afterArr.length;j++){
if (!cenObj[afterArr[j]]){
resObj.add.push(afterArr[j]);
}else {
delete cenObj[afterArr[j]]
}
}
for (k in cenObj){
resObj.del.push(k);
}
return resObj;
}