数组扁平化的实现方式

数组扁平化的实现方式

方法一

利用数组的 join() 转换成字符串,利用字符串的 split() 转换成数组
利用map 遍历数组,将每一项字符串类型转换成数字类型

var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = array=>array.join(',').split(',').map(item=>Number(item));
flatten(arr);

方法二

使用ES6 数组的reduce()方法结合数组的扩展运算符,reduce()里面是一个回调函数,
acc必选起始值, 若init 存在,则acc 为init值,current 必选,当前值;init,可选任意数据类型,0/[]/{}/''等等,数据类型取决于运算结果的类型

Array.reduce(function(acc,current){},init)

var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = array => array.reduce((acc, cur) =>
     Array.isArray(cur)? [...acc, ...flatten(cur)] : [...acc, cur],[]);
flatten(arr);

方法三

迭代 遍历

var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = function(array){
    for(var item of array){
       //这种和下面的写法区别在哪:  Array.isArray(item)? [].concat([...item]):[];
        if(Array.isArray(item)){
            array = [].concat(...array)
        }
    }
    return array;
}
flatten(arr)

方法四

递归

var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = function(array){
    var newArr = [];
    for(var item of array){
        if(Array.isArray(item)){
            newArr.push(...flatten(item))
        }else {
            newArr.push(item)
        }
    }
    return newArr;
}
flatten(arr)

你可能感兴趣的:(数组扁平化的实现方式)