数组去重与数组扁平化

一、数组去重
(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;
}

 

posted @ 2019-07-29 12:57  安xiao曦  阅读(458)  评论(0编辑  收藏  举报