二维数组转一维数组
reduce
var arrs = [1, 2, 3, [4, 5], ['s', 'e', 's']]
var flatArr = arrs.reduce((acc, item) => (acc.concat(item)), [])
concat
var newArr = [].concat(...arrs)
var newArr1 = Array.prototype.concat.apply([], arrs)
flat(ES6)
var flatArr1 = arrs.flat();
递归降维(多维)
forEach
Array.isArray() 用于确定传递的值是否是一个 Array,返回 true 或者 false。
在这个递归方法中,我们判断每一项是不是数组。
如果是,则进一步递归,直到其不是为止。
如果不是,则用新数组接收它。
var arr = [1, 2, ['t', 'h'], 3, [4, 5, [6, 7, 8, [10, 11]]], ['s', 'e', 's', ['d', 'f', 'b']]]
const flatArr = [];
function getFlatArr(arr) {arr.forEach((item) => {if (Array.isArray(item)) {getFlatArr(item)} else {flatArr.push(item)}})
}
getFlatArr(arr, flatArr)
reduce
const getFlatArr = (arr) => arr.reduce((acc, item) => {if (Array.isArray(item)) {return acc.concat(...getFlatArr(item))}return acc.concat(item)
}, [])const flatArr = getFlatArr(arr)
flat
flat() 是 ES6 提供的一个将嵌套的数组 “拉平” 的方法。如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
const flatArr = arr.flat(Infinity);
const flatArr = arr.flat(2);