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:可选。当前元素所处的数组对象