数组去重
for循环去重
判断一个数组里面是否有重复的
function distinct(arr) {
for (let i=0, len=arr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return arr;
}
Array.filter() 加 indexOf
function distinct(a, b) {
let arr = a.concat(b);
return arr.filter((item, index)=> {
return arr.indexOf(item) === index
})
}
ES6 中的 Set 去重
let unique = (a) => [...new Set(a)]
或参考数组去重的多种方法
数组对象合并去重
例子
//前端处理数据的时候,常见的数组对象,合并并且去重,两个数据如下: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"},
]
方法一 for循环
for (var obj in json1){//临时选择数据
var includeThis = false;
for(var dbj in json2){ //右侧table里的数据
if(json1[obj].id==json2[dbj].id){
includeThis=true;
}
}
if(includeThis==false){
json.push(storageArea[obj]);//把当前临时数据的这一条放到右侧table的数据里
}
}
也可以先合并在去重
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);
方法二 javascript 数组的高阶函数reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
单个数组对象去重
let b = [{ id: '4', result: '第三' }, { id: '2', result: '第四' },
{ id: '2', result: '第二' }]
let d = []
let hash = {}
d = b.reduce((item, next) => {
hash[next.id] ? '' : hash[next.id] = true && item.push(next)
return item
}, [])
console.log(d, '看看看')
//多个数组对象去重
let newDatas = [...this.json1, ...this.json2];
let d = []
let hash = {}
d = newDatas.reduce((item, next) => {
hash[next.id] ? '' : hash[next.id] = true && item.push(next)
return item
}, [])
console.log(d);