常用扁平化数组的方法介绍

方法1–递归:循环数组元素,如果还是一个数组,就递归调用方法;

function flatten(arr) {
var result = [];
for(var i=0;i ### 方法2–toString:如果数组元素全部为数字,可以使用toString()方法。

调用toString方法,返回一个逗号分隔的扁平的字符串,然后split(‘,’)分隔成一个字符串形式的扁平数组,然后调用map方法,在map方法中调用parseInt()或 ‘+’强制转换成数字类型。

function flatten(arr) {
return arr.toString().split(‘,’).map(item => parseInt(item));
// return arr.toString().split().map(item => +item);
}

方法3–reduce:对数组进行处理,最后返回一个值。

在reduce中有两个参数,第一个参数为一个执行每个数组元素的函数,第二个参数是传递给函数的初始值。
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total必需,初始值, 或者计算结束后的返回值。currentValue必需,当前元素。currentIndex可选,当前元素的索引。arr可选,当前元素所属的数组对象。
initialValue 可选,传递给函数的初始值

function flatten(arr) {
return arr.reduce(function(prev,next){
return prev.concat(Array.isArray(next)?flatten(next):next);
},[])
}

方法四–运用ES6扩展运算符… :取出参数对象的所有可遍历属性,拷贝到当前对象中

some() 方法用于检测数组中的元素是否满足指定条件(函数提供);some() 方法会依次执行数组的每个元素:如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false。注意: some()不会对空数组进行检测。注意:some()不会改变原始数组。
array.some(function(currentValue,index,arr),thisValue) currentValue必选,其他可选。

function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(…arr);
}
return arr;
}

console.log(flatten([1,[2,[3,4],[5,6],7],8]));