目录
–始于心动呗 ♥
最近项目频繁用到数据处理-----数组去重,总结了下,我用的几个。超级简便。
我这里的数组都是复杂数组,所以直接用indexOf结合for循环不适合这种,比较适合简单数组。
这个不适合这种复杂数组。适合 arr =[1,2,3,2,3,2,1,7] 这样的数组。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
var newArr :any =[]
for(var i =0 ; i <arr.length; i++){
if(newArr.indexOf(arr[i])=== -1){
newArr.push(arr[i])
}
}
---------------------------- 😢66分割线 --------------------------------------
大白鹅的: 公用数组
let arr =[
{date:'20200202',flag:'night',num:1},
{date:'20200202',flag:'day',num:1},
{date:'20200202',flag:'day',num:2},
{date:'20200202',flag:'night',num:1},
{date:'20200202',flag:'day',num:3},
]
那么下面的就比较舒服合适了。
1.结合IN方法唯一属性去重
T I P❗ ❗ ❗你知道 **JavaScript中in和hasOwnProperty的区别吗,大兄弟:
in判断的是对象的所有属性,包括对象实例及其原型的属性; 而hasOwnProperty则是判断对象实例的是否具有某个属性。**
let obj = {}
arr.forEach((item)=>{
if(`${item.date}${item.flag}` in obj){
obj[`${item.date}${item.flag}`].num += item.num
}else{
obj[`${item.date}${item.flag}`] = item
}
console.log(Object.values(obj))
普通数组去重并统计
var arr = ["a","b","c","a","d","c","e","d","c","a","c"];
var ary={};
for(let i=0;i<arr.length;i++){
if(arr[i] in ary){
ary[arr[i]]=ary[arr[i]]+1;
}else{
ary[arr[i]]=1;
}
}
如果是数组里某个元素来去重并统计
const todayArr = [
{
color: '#4B4B00',
lmyId: 'Y2112190906',
salesman: '丫丫',
},
{
color: '#4B4B4B',
lmyId: 'Y2112190910',
salesman: '大白鹅',
},
{
color: '#4B4B89',
lmyId: 'Y2112190901',
salesman: '天天',
},
{
color: '#4B4B89',
lmyId: 'Y2112190901',
salesman: '大白鹅',
},
];
const ary = {};
for (let i = 0; i < todayArr.length; i++) {
if (todayArr[i].salesman in ary) {
ary[todayArr[i].salesman] = ary[todayArr[i].salesman] + 1;
} else {
ary[todayArr[i].salesman] = 1;
}
}
console.log('ary==', ary);
2.JSON对象骚气去重🌈
//这个就比第一种更加简便,贼骚气。
var jsonObj: any = {}
var el = arr[i];
jsonObj[el.date + el.flag] = el;
console.log("test", jsonObj);
3.map结合find去重
var newlist: any = [];
arr.map((_data: any) => {
const _find = newlist.find((_item: any) => {
return ( _item.date === _data.date && _item.flag === _data.flag );
});
if (_find) { _find.num += _data.num;
} else {
newlist.push(_data);
}
});