一、for循环判断
let a=[1,2,4,2,3,1,2,2]
function duplRem(arr) {
let b=[];
let flag=true;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < b.length; j++) {
if (arr[i]==b[j]) {
flag=false;
break;
}else{
flag=true;
}
}
if (flag) {
b.push(arr[i]);
}
}
return b;
}
let c=duplRem(a);
console.log(c);//(4) [1, 2, 4, 3]
二、ES6中的Set对象
Set对象是一组不重复的值,重复的值会被忽略
1、一个数组去重
let a=[1,2,4,2,3,1,2,2]
let c=new Set(a);
console.log(c);//Set(4) {1, 2, 4, 3}
2、两个数组合并去重(取合集)
let a=[1,2,4,2,3,1,2,2]
let b=[2,5,2,3,1,5,3,3]
let c=new Set([...a,...b]);
console.log(c);//Set(5) {1, 2, 4, 3, 5}
Set对象,返回的是一个对象,不是数组。不过,Set对象自带Iterator接口,可以用for of遍历。
let a=[1,2,4,2,3,1,2,2]
let c=new Set(a);
for(let val of c){
console.log(val);
}
console.log(c);
遍历后可以放到一个新数组中,也可以用Array.from方法将对象转换成数组:
let a=[1,2,4,2,3,1,2,2]
let c=new Set(a);
let d=Array.from(c);
console.log(d);
三、对象数组去重
用了Set对象,感觉用于数组去重很方便,想如果数组是一个对象数组,是否也可以使用Set来去重。
let a=[
{name:"刘备"},
{name:"刘备"},
{name:"刘备"},
{name:"刘备"},
{name:"刘备"},
]
let c=new Set(a);
console.log(c);//Set(5) {{…}, {…}, {…}, {…}, {…}}
结果显示并没有达到去重的效果,每个对象都是不一样的。那么对象数组的去重是否还是需要循环每个对象的值呢?
四、根据对象数组中的日期计算天数
应用场景:对象数组中有日期,根据日期计算用户共记录的天数
// 对象数组
[{"aclass": "兼职", "date": "2021-06-24", "explain": "小程序", "incomePay": 1, "money": "105"}, {"aclass": "红包", "date": "2021-06-24", "explain": " 家长", "incomePay": 1, "money": "35"}, {"aclass": "购物", "date": "2021-06-24", "explain": "短袖", "incomePay": 0, "money": "55"}, {"aclass": "餐饮", "date": "2021-06-24", "explain": "午餐", "incomePay": 0, "money": "20"}]
export function dayCount(arr) {
let daySet =new Set()
for(let item of arr){
daySet.add(item.date)
}
console.log(daySet);
}
获得Set对象
// Set {"2021-06-24", "2021-06-23", "2021-06-21", "2021-06-19", "2021-05-23", "2021-05-16", "2021-04-23", "2021-03-23"}
返回长度即天数
export function dayCount(arr) {
let daySet =new Set()
for(let item of arr){
daySet.add(item.date)
}
return daySet.size
}