JS之数组扁平化

最近发现,数组扁平化在面试笔试中出现平率很高~

1、数组扁平化是指将一个多维数组变为一维数组
2、数组扁平化的五种方法

(1)reduce()
reduce()函数:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值;
语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total:必需。初始值, 或者计算结束后的返回值;
currentValue:必需。当前元素;
currentIndex:可选,当前元素的索引;
arr:可选,当前元素所属的数组;
initialValue:可选,传递给函数的初始值;

function flatten(arr) {  
  return arr.reduce((result, item)=> {
      return result.concat(Array.isArray(item) ? flatten(item) : item);
  }, []);
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]

(2)toString()和split方法结合使用
先将多维数组通过toString()方法转化为字符串,然后用逗号隔开,最后将每一项转化为数值。

function flatten(arr) {
  return arr.toString().split(',').map(function(item) {
      //return Number(item);
      return parseInt(item);
  })
} 
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]

(3)join() & split()结合使用
思路和toString()的思路一样

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]

(4)递归
递归的遍历每一项,若为数组则继续遍历,否则concat

function flatten(arr) {
    var res = [];
    arr.map(item => {
        if(Array.isArray(item)) {
            res = res.concat(flatten(item));
        } else {
            res.push(item);
        }
    });
    return res;
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]

(5)ES6的扩展运算符
es6的扩展运算符能将二维数组变为一维

[].concat(...[1, 2, 3, [4, 5]]);  // [1, 2, 3, 4, 5]

参考文档:https://www.cnblogs.com/wind-lanyan/p/9044130.html

猜你喜欢

转载自blog.csdn.net/weixin_40736319/article/details/89343098