js实现数组去重

本文介绍了JavaScript中实现数组去重的几种常见方法,包括Set、filter、双层循环、reduce以及利用对象键值和ES6Map。现代环境推荐使用Set和Map以实现高效且简洁的去重。
摘要由CSDN通过智能技术生成

前言

JavaScript 中实现数组去重的方法有很多种,下面列举一些常见的解决方案。

使用 Set

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let uniqueArray = [...new Set(array)];
console.log(uniqueArray);

Set 是 ES6 引入的新的数据结构,它不允许重复值,所以可以直接将数组转换为 Set 再转回数组达到去重目的。

利用 filter 方法

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let uniqueArray = array.filter((value, index, self) => {
  return self.indexOf(value) === index;
});
console.log(uniqueArray);

此方法通过 filter 函数遍历数组,并利用 indexOf 检查当前元素在原数组中的索引是否等于当前遍历到的索引,如果不是则保留该元素。

双层循环法

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let uniqueArray = [];
for (let i = 0; i < array.length; i++) {
  if (uniqueArray.indexOf(array[i]) === -1) {
    uniqueArray.push(array[i]);
  }
}
console.log(uniqueArray);

这种方法创建一个新的空数组,然后遍历原数组,若新数组中没有当前元素,则添加进去。

使用 reduce

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let uniqueArray = array.reduce((accumulator, currentValue) => {
  return accumulator.includes(currentValue) ? accumulator : [...accumulator, currentValue];
}, []);
console.log(uniqueArray);

reduce 方法可以用来简化数组操作,这里同样是检查累计器(accumulator)中是否已包含当前值,不包含的话就将其添加进结果数组。

利用对象键值特性

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let obj = {};
let uniqueArray = array.filter(item => {
  return !obj[item] ? (obj[item] = true) : false;
});
console.log(uniqueArray);

这种做法是利用 JavaScript 对象的键名唯一性,遍历数组时将元素作为对象的键存入,如果元素已经存在,则 obj[item] 的值会是 true,因此过滤函数返回 false,从而去除重复项。

ES6 Map

let array = [1, 2, 3, 4, 4, 5, 6, 5, 7];
let uniqueArray = [...new Map(array.map(item => [item, item])).values()];
console.log(uniqueArray);

与使用 Set 类似,这里是先将数组映射成键值对(键和值相同),然后转换为 Map,最后获取其所有值(即去重后的数组)

总结

根据实际场景和兼容性需求选择适合的方法。在现代浏览器或支持 ES6+ 特性的环境中,推荐使用 Set 或 Map 方式,它们不仅简洁而且性能较好。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值