js 数组扁平化

 数组扁平化:将一个多维数组变为一维数组

// 二维数组
const arr = [1, [2,3],[4,5]];
const flatArr1 = arr.join().split(",");  // 方法1
const flattArr2 = arr.toString().split(",");  // 方法2

arr.join(separator): 将数组中的所有元素放入一个字符串。separator:指定数组元素组成新字符串时的分隔符,不填写时,默认逗号为分隔符。

str.split(separator, any): 把字符串分割为字符串数组。 separator: 从该参数指定的符号处,将字符串分割为数组。

arr.toString(): 把数组转换为字符串,并返回结果。返回值与没有参数的 join() 方法返回的字符串相同。

// 多维数组
const arr = [1,[2,[3,[4]]]];
const flatArr3 = arr.flat(4);    // 方法3

arr.flat(num): 用于将嵌套的数组“拉平”,变成一维的数组。返回一个新数组,对原数据没有影响。num:可选。默认为2,即拉平两层数组。如果拉平多层,可用关键字Infinity作为参数。falt()方法会跳过数组中的空位。

// 多维数组 方法4
var arr = [1,[2],[3,[4]],[5,[6,[7,8]]]];
flatArr4= (arr)=> [].concat(...arr.map(v => Array.isArray(v) ? deepFlattenFn(v): v))
flatArr4(arr)

arr.concat(arr1,arr2,...,arrN): 连接两个或多个数组。参数可以是具体的值,也可以是数组对象。可以是任意多个。

// 多维数组 方法5
const flatten= arr => arr.reduce((item, next) => item.concat( Array.isArray(arr)? flatten(next): next, []));

arr.reduce(): 函数累加器,接受一个函数作为参数,对数组中的值从左到右依次进行处理。

语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

  initialValue: 传递给函数的初始值,可选。

  function:函数参数

    total: 必需。初始值

    currentValue:必需。当前元素

    currentIndex:可选。当前元素的索引

    arr:可选。当前元素所处的数组对象

 

posted @ 2019-03-19 15:03  李里ly  阅读(1007)  评论(0编辑  收藏  举报