数组扁平化的实现方式
方法一
利用数组的 join() 转换成字符串,利用字符串的 split() 转换成数组
利用map 遍历数组,将每一项字符串类型转换成数字类型
var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = array=>array.join(',').split(',').map(item=>Number(item));
flatten(arr);
方法二
使用ES6 数组的reduce()方法结合数组的扩展运算符,reduce()里面是一个回调函数,
acc必选起始值, 若init 存在,则acc 为init值,current 必选,当前值;init,可选任意数据类型,0/[]/{}/''等等,数据类型取决于运算结果的类型
Array.reduce(function(acc,current){},init)
var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = array => array.reduce((acc, cur) =>
Array.isArray(cur)? [...acc, ...flatten(cur)] : [...acc, cur],[]);
flatten(arr);
方法三
迭代 遍历
var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = function(array){
for(var item of array){
//这种和下面的写法区别在哪: Array.isArray(item)? [].concat([...item]):[];
if(Array.isArray(item)){
array = [].concat(...array)
}
}
return array;
}
flatten(arr)
方法四
递归
var arr = [1,2,[3,4,5,[6,7],8,9],[10,11,[12,13]]];
var flatten = function(array){
var newArr = [];
for(var item of array){
if(Array.isArray(item)){
newArr.push(...flatten(item))
}else {
newArr.push(item)
}
}
return newArr;
}
flatten(arr)
网友评论