数组扁平化(数组展开)
第一种:flat()
let arr1=[1,2,[a,b,c],3]; console.log(arr1.flat());
flat()还未加入到ES6规范中。 如果有多层可以在flat()中加参数Infinity
let arr1=[1,2,[a,b,c,[e,f]],3]; console.log(arr1.flat(Infinity));
问题:
let arr1=[1,2,{ x:1,y:2},3]; console.log(arr1.flat(Infinity));
第二种:map
function flat(items){ let res=[]; items.map(item=>{ if(Array.isArray(item)){ res=res.concat(flat(item)); }else{ res.push(item); } }) return res; }
第三种 : forEach
function flat(items){ let res=[]; items.forEach(item=>{ if(Array.isArray(item)){ res=res.concat(flat(item)); }else{ res.push(item); } }) return res; }
也可以使用for循环,原理和forEach一样,遍历数组中的每一项。 第四种:reduce
function flat(items){ return items.reduce((prev,current)=>{ prev.concat(Array.isArray(current)?flat(current):item); },[]); }
第五种:扩展运算符
function flat(items) { while(items.some(item=>Array.isArray(item))) { items= [].concat(...items); } return items; }
也可以采用toString+split或join+split,但是 toString 转化为字符串的时候,不会区分字符串和数字类型,如果需要区分数据类型最好不要使用。
console.log(arr1.toString().split(",")) console.log(arr1.join(",").split(","))