数组扁平化:多维数组转成一维数组
1.递归
function flatten(arr) {
let result = []
for (let i = 0; i < arr.length; i++){
console.log(arr[i]);
if(Array.isArray(arr[i])) { //如果是数组的话
result = result.concat(flatten(arr[i])) //递归
} else {
result.push(arr[i]); //基本数据类型,直接push到新数组
}
}
return result;
}
console.log(flatten([1,2,3,[4,5,[6,7]],8]));
将多维数组依次遍历,为了处理可能的多维情况,进行递归,将结果返回并用concat连接,如果不是多维情况,则直接push进结果串
2.reduce
function flatten(arr) {
return arr.reduce((result,item)=> {
return result.concat(Array.isArray(item) ? flatten(item) : item);
},[]);
}
思路与上面的相似,也是递归和直接返回,但用到了reduce函数
下面介绍reduce函数的用法
var numbers = [15.5,2.3,1.1,4.7];
function getSum(total, num) {
return total + Math.round(num);
}
function myFunction(item) {
return numbers.reduce(getSum,0); //累加函数和初值0
}
reduce函数语法
array.reduce(function(total, currentValue, currentIndex,arr),initialValue)
total初始值或返回值
currentValue 当前元素
currentIndex 当前元素索引
arr 当前元素所属的数组对象
getSum是一个累加函数,而0是初值,最终会返回numbers数组的和