数组对象去重

需要去重的数组对象:

	let arrList = [
	    { name: "挪威的森林", id: 1 },
	    { name: "Last Dance", id: 1 },
	    { name: "突然的自我", id: 2 },
	    { name: "浪人情歌", id: 3 },
	    { name: "海阔天空", id: 2 },
	    { name: "光辉岁月", id: 4 }
	];

方法一:使用 Map()

has方法可以判断Map对象中是否存在指定元素,有则返回true,否则返回false

set方法可以向Map对象添加新元素 map.set(key, value)

values方法可以返回Map对象值的遍历器对象


	// 方法一
	let map = new Map();
	for(let item of arrList){
		if (!map.has(item.id)) {
	        map.set(item.id, item);
	    };
	}
	arr = [...map.values()];
	console.log(arr);
	
	// 方法二: (代码较为简洁)
	const map = new Map();
	const newArr = arrList .filter(v => !map.has(v.id) && map.set(v.id, 1));
	console.log(newArr);	

方法二: 使用 .filter() 和 .findIndex() 相结合的方法

使用 filter() 方法过滤掉重复的元素

使用 findIndex() 方法判断对象是否重复


const newArr = arrList.filter((item, index) => arrList.findIndex(i => i.id === item.id) === index);

方法三:使用 .forEach() 和 .some() 相结合的方法

使用 forEach() 方法遍历数组

使用 some() 方法判断是否重复

const newArr = [];
arrList.forEach(item => {
  if (!newArr.some(i => i.id === item.id)) {
    newArr.push(item);
  }
});

方法四:使用indexOf()

定义一个数组存储id的值,然后逐个比较,把id值重复的对象删除即可

	let newArr = [];
    for (let i = 0; i < arrList.length; i++) {
        if (newArr.indexOf(arrList[i].id) == -1) {
            newArr.push(arrList[i].id);
        } else {
            arrList.splice(i, 1);
            i--;
        };
    };
    console.log(arrList);

方法五:使用双层for循环

两两比较,如果后一个对象的id值和前一个对象的id值相等,就把后面的对象删除

	for (let i = 0; i < arrList.length; i++) {
        for (let j = i + 1; j < arrList.length; j++) {
            if (arrList[i].id == arrList[j].id) {
                arrList.splice(j, 1);
                j--;
            };
        };
    };
    console.log(arrList);

方法六:使用 For const of 和 find 结合

创建一个空的唯一数组来存储唯一对象

循环遍历数组中的对象。对于每个对象,如果它不是重复的,则将其添加到唯一数组。否则,忽略它


const newArr = [];
for (const item of arrList) {
  const isRepeat = newArr.find((obj) => obj.id === item.id);
  if (!isRepeat) {
    newArr.push(item);
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值