多维数组转一维数组,也是常见的面试题,可能还有很多其他方法,我只说我自己知道了,应该够用了
var data= [
1,
2,
[3, 4],
[5, [6, [7, 8]]],
9,
[10, [11, [12, 13]], 14, "a", ["b", "c", ["d", "e"]]],
15,
];
1. flat()
function flatFn(data){
return data.flat(Infinity);
}
2. toString()
function flatFn(data){
return data.toString().split(",");
}
注意:toString() 此方法只适合纯数字
3. reduce
function flatFn(data,list=[]) {
return data.reduce((pre, cur) => {
Array.isArray(cur) ? arrFn(cur, pre) : pre.push(cur);
return pre;
}, list);
}
4. reduce + concat
function flatFn(data) {
return data.reduce((pre, cur) => {
if (Array.isArray(cur) && cur.some((item) => Array.isArray(item))) {
return pre.concat(flatFn(cur));
} else {
return pre.concat(cur);
}
}, []);
}
5. ... + concat
function flatFn(data) {
let arr = [].concat(...data);
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
还有其他方法,欢迎下方留言探讨!