JS数组专题2️⃣ ➖ 数组去重

 距离上次发文,已经有一段时间了,最近工作比较忙,这不眼看快双十一了,就相当于给大家一些福利吧!

装逼图

一、什么是数组去重

简单说就是把数组中重复的项删除掉,你 GET 到了吗 ?下面我将简单介绍下几种基本的方法及其优缺点。

二、方法汇总

  • 两层循环

** 无相同值直接 push 进新数组,有相同的值则直接跳过本次内部循环 **

/*  * @param {Array} arr    -要去重的数组  * @param {Array} result -初始化结果数组  */ const unique = (arr, result = []) => {   const len = arr.length;   for (let i = 0; i < len; i++) {     for (let j = i + 1; j < len; j++) {       if (arr[i] === arr[j]) {         // 相等则直接跳过         j = ++i;       }     }     result.push(arr[i]);   }   return result; }

** 相同的做标记,与新数组作比较,没有则插入 **

/*  * @param {Array} arr    -要去重的数组  * @param {Array} result -初始化结果数组  */ const unique = (arr, result = []) => {   result.push(arr[0]);   const len = arr.length;   let rLen = result.length;    for (let i = 1; i < len; i++) {     let flag = false;     for (var j = 0; j < rLen; j++) {       if (arr[i] === result[j]) {         flag = true;         break;       }     }     if (!flag) {       rLen++;       result.push(arr[i]);     }   }   return result; } 

** 原地算法(在数组本身操作) **

const unique = arr => {   const len = arr.length;   for (let i = 0; i < len; i++) {     for (let j = i + 1; j < len; j++) {       if (arr[i] == arr[j]) {         arr.splice(j,1);         len--;         j--;       }     }   }   return arr; };

看似代码代码简单,实则内存占用高,不实用

  • 单层循环

** 对象键不能重复 **

const unique = (arr, result = []) => {   const obj = {};   const len = arr.length;   for (let i = 0; i< len; i++) {     if (!obj[arr[i]]) {       // 键没有,则添加       obj[arr[i]] = 1;       result.push(arr[i]);     }   }   return result; };

这种方法无法判断 '1' 和 1 等类型,解决方案:

  1. 添加判断数据类型,比如 typeofobj[typeof arr[i] + arr[i]]不过这还是判断不了 ['1'] 和 
    关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信