• 将数组扁平化,并去除其中重复的部分数据,最终得到一个升序且不重复的数组


    let arr = [[21, 2, 17, 18, 2], [3, 4, 95, 5, 5], [6, 6, 7, 8], [9, 10, [11, 12]]];

    // =>【1、扁平化】 使用 ES6 中提供的 Array.prototype.flat 处理
    // arr = arr.flat(Infinity);

    // =>【2、扁平化】 把数组直接变成字符串即可(数组 toString 之后,最后会变为以逗号分隔的字符串)
    // arr = arr.toString().split(',').map(item => {
    //    return Number(item);
    // })

    // =>【3、扁平化】
    // arr = arr.join('|').split(/(?:,||)/g).map(item => {
    //   return Number(item);
    // })
     
    // =>【4、扁平化】 JSON.stringify
    // arr = JSON.stringify(arr).replace(/([|])/g, '').split(',').map(item => Number(item));
     
    // =>【5、扁平化】 some 方法进行判断检测:验证数组中的某一项有没有符合函数中提供的规则的
    // while (arr.some(item => Array.isArray(item))) {
    //   arr = [].concat(...arr);
    // }
    // console.log(arr);

    // =>【6、扁平化】 find 方法
    //------------ find 和 some 的区别:some 返回的是 boolean, find 找到符合规则的,返回当前这一项,没有找到符合规则的,返回 undefined ------------
     
    // =>【7、扁平化】在闭包函数中自己递归处理
    ~function () {
      function myFlat() {
        let result = [],
         _this = this;
        // => 循环 arr 中的每一项,把不是数组的存储到新数组中
        let fn = (arr) => {
          for (let i = 0; i < arr.length; i++) {
            let item = arr[i];
            if (Array.isArray(item)) {
              fn(item);
              continue;
            }
            result.push(item);
          }
        };
        fn(_this);
        return result;
      }
      Array.prototype.myFlat = myFlat;
    }();
    arr = arr.myFlat();
    console.log(arr)
     
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    // =>【1、去重排序】基于 ES6 中的 new Set() 去重数组并升序
    // [...new Set(arr)]
    // Array.from(new Set(arr))
       arr = Array.from(new Set(arr)).sort((a, b) => a - b);
       console.log(arr);

    // =>【2、去重排序】indexOf
    // let res = [];
    // for(let i = 0; i < arr.length; i++){
    //    if(res.indexOf(arr[i]) === -1){
    //       res.push(arr[i]);
    //       res.sort((a, b) => a - b);
    //    }
    // }
    // console.log(res);

    // =>【3.1、双重 for 循环 将数据和后面的数据进行比对】
    // function Arr(arr) {
    //    let res = [],
    //      isRepeat = false;
    //    for (let i = 0; i < arr.length; i++) {
    //     isRepeat = false;
    //     for (let j = i + 1; j < arr.length; j++) {
    //        if (arr[i] === arr[j]) {
    //          isRepeat = true;
    //          break;
    //        }
    //      }
    //     if (!isRepeat) {
    //        res.push(arr[i]);
    //        res.sort((a, b) => a - b);
    //     }
    //   }
    //   return res;
    // }
    // console.log(Arr(arr));


    // =>【3.2、双重 for 循环 将数据和新保存的数据进行比对】
    // function Arr(arr) {
    //    let res = [],
    //      isRepeat = false;
    //      for (let i = 0; i < arr.length; i++) {
    //       isRepeat = false;
    //       for (let j = 0; j < res.length; j++) {
    //        if (res[j] === arr[i]) {
    //          isRepeat = true;
    //          break;
    //        }
    //       }
    //       if (!isRepeat) {
    //         res.push(arr[i]);
    //         res.sort((a, b) => a - b);
    //       }
    //     }
    //     return res;
    // }
    // console.log(Arr(arr));

    // =>【4、去重排序】 forEach 方法
    // function Arr(arr) {
    //   let res = [];
    //     arr.forEach(function (item, idx, arr) {
    //     if(!res.includes(item)){
    //         res.push(item);
    //         res.sort((a, b) => a - b);
    //      }
    //    })
    //    return res;
    // }
    // console.log(Arr(arr));

    // =>【5、去重排序】 reduce 方法
    // function Arr(arr) {
    //   return arr.sort((a, b) => a - b).reduce(function (res, elem, arr) {
    //     if (res.length === 0 || res[res.length - 1] !== elem) {
    //       res.push(elem);
    //     }
    //     return res;
    //   }, [])
    // }
    // console.log(Arr(arr));
  • 相关阅读:
    Mac OS terminal 查看内存使用情况的命令
    【教程】5分钟在以太坊上发行自己的代币
    Mac下eclipse的快捷键
    Mac上编辑文本的一些实用快捷键:跳转、选中等操作
    Mysql数据库用source命令导入SQL文件,利用navicat修改MySQL用户root密码,忘记mysql密码如何修改
    比特币1个确认和6个确认的区别在哪里?什么是双花问题?
    以 1、3、bc1 开头的比特币地址都有啥区别?转账手续费那种便宜,隔离见证地址为什么手续费便宜?
    以太坊 2.0 中的 DeFi:城市、郊区、农村
    Mac版navicat生成ER图把表结构导出pdf
    下载文件(API接口,Angularjs前端)
  • 原文地址:https://www.cnblogs.com/HYTing/p/12619201.html
Copyright © 2020-2023  润新知