zoukankan      html  css  js  c++  java
  • 数组去重与数组扁平化

    一、数组去重
    (1)indexOf()
    function only(arr){
        var res=[];
        arr.forEach(function(item){
            if(res.indexOf(item)==-1){
                res.push(item);
            }
        })
        return res;
    }

    (2)Set结构

    var set=new Set(arr);
    Array.from(set);

    (3)filter过滤

    function only(arr){
        var res=[];
        res=arr.filter(function(item,index,self){
            if(self.indexOf(item)==index){
                return item;
            }
        })
        return res;
    }

    (4)reduce()

    function only(arr){
        var res=[];
        return arr.reduce((pre,cur)=>{
            if(!pre.includes(cur)){
                return pre.concat(cur);
            }
            else{
                return pre;
            }
        },[])
    }

    (5)lastIndexOf() 

    function only(arr){
        var res=[];
            arr.forEach(function(item){
            if(arr.indexOf(item)==arr.lastIndexOf(item)){
                res.push(item);
            }
        })
        return res;
    }    

    二、数组扁平化处理可以用reduce

    例:实现一个flatten方法,使得输入一个数组,该数组里面的元素也可以是数组,该方法会输出一个扁平化的数组。
    arr=[[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
    console.log([1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10]);

    (1)递归
    function flatter(arr){
        var res=[];
        arr.map(function(item){
            if(Array.isArray(item)){
                res=res.concat(flatter2(item));
            }
            else{
                res.push(item);
            }
        })
        return res;
    }
    
    

    (2)reduce()

    function flatten(arr){
          return arr.reduce(function(pre,item){
                 return pre.concat(Array.isArray(item)?flatten(item):item);
          },[]);
    }

    (3)toString()+spilt()+ParseInt()

     调用数组的toString()方法,将数组变成字符串,然后再用split()分割还原成数组

    function flatten(arr){
        return arr.toString().split(',').map(function(item){
            return parseInt(item);
        })
    }
    
    function flatten(arr){
        return arr.join(',').split(',').map(function(item){
            return parseInt(item);
        })// 用join()方法也可以转成字符串
    }

     缺点:只适用于数组元素均为数字的情况。

    (4)扩展运算符

    ES6的扩展运算符能将二维数组变为一维。

    [ ].concat(...[1,2,3,[4,5]])——>[1,2,3,4,5]

    arr.some()只要有一个符合条件就返回true,所以循环遍历判断元素是否包含数组,如果有就使用一次扩展运算符。

    function flatten(arr) {
         while(arr.some(item=>Array.isArray(item))) {
                arr = [].concat(...arr);
          }
         return arr;
    }
  • 相关阅读:
    禅道安装
    logstash将配置写在多个文件
    原版Filebeat+ELK
    Filebeat+ELK部署文档
    A-2---Jenkins安装
    Linux ftp服务器搭建
    linux 网络命令
    yum安装时出现No more mirrors to try.
    kvm 修改虚拟机密码
    NFS安装
  • 原文地址:https://www.cnblogs.com/xiaoan0705/p/11263278.html
Copyright © 2011-2022 走看看