前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个让我耳目一新的数组去重方法

一个让我耳目一新的数组去重方法

原创
作者头像
fastmock
发布2024-04-30 11:27:21
2010
发布2024-04-30 11:27:21
举报
文章被收录于专栏:fastmockfastmock

在以往工作中,一遇到数组去重,一般都会用下面的几个方法

一、双重循环(被去重数组和结果数组)去重

代码语言:js
复制
const ary = [];
for (let i = 0; i < array.length; i++) {
  let isDuplicate = false;
  for (let j = 0; j < i; j++) {
    if (array[i] === array[j]) {
      isDuplicate = true;
      break;
    }
  }
  if (!isDuplicate) {
    ary.push(array[i]);
  }
}

二、简单对象记录元素是否存在

代码语言:js
复制
const result = [];
const tmp = {};
for (let i = 0; i < array.length; i++) {
  const item = array[i];
  if (!tmp[item]) {
    result.push(item);
    tmp[item] = true;
  }
}

上面两种方法是最原始的去重方法了,现在基本不用了

三、利用ES6的reduce方法去重

代码语言:js
复制
const ary = array.reduce((result, current) => {
  return result.includes(current) ? result : [...result, current];
}, []);

这个方法比较常用,因为它可以去重基础数据类型组成的数组,也可以去重对象或数据类型数据组成的数组,如:

代码语言:js
复制
const ary = array.reduce((result, current) => {
    const isExsist = result.some(item => item.name === current.name);
    return isExsist ? result : [...result, current];
}, []);

四、利用ES6的新增数据类型Set去重

代码语言:js
复制
const ary = [...new Set(array)];
// OR
const ary2 = Array.from(new Set(array))

充分利用Set的不重复特性来达到去重的目的

直到最近,我收到了某公众号推送的一条消息,标题叫“一个让面试官对你产生好感的数组去重方法”,点进去之后,确实有让我耳目一新的感觉,废话不多说,先看代码

代码语言:js
复制
const ary = array.filter((item, index, originArray) => {
  return originArray.indexOf(item) === index;
});

看懂了代码后,第一感觉是,在我没全面使用es6之前,我怎么就不知道还有这个方法来去重。

这个方法充分利用了数组的indexOf方法的特点,那就是它永远只会返回第一个被查找元素的索引,那么,在filter方法中,非第一个的就会被过滤掉,真的不得不服有些人的举一反三的能力,有了这个方法,就算不适用es6的filter方法,也可以只遍历一次原数组就可以去重了

代码语言:js
复制
const result = [];
array.forEach((item, index) => {
  if(array.indexOf(item) === index) {
      result.push(item)
  }
});

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、双重循环(被去重数组和结果数组)去重
  • 二、简单对象记录元素是否存在
  • 三、利用ES6的reduce方法去重
  • 四、利用ES6的新增数据类型Set去重
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


http://www.vxiaotou.com