js数组扁平化 -flatten
数组扁平化(降维过程,多维数组经过扁平化变成一维数组)。
方法有很多,下面只列举几种
方法一:
ES6的 arr.flat(Infinity)方法会递归到指定深度将所有子数组连接,并返回一个新数组, depth指定嵌套数组中的结构深度,默认值为1,不管多少层则可以用Infinity关键字作为参数。
//数组扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; console.log(arr.flat(Infinity)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]
方法二:
递归实现
//数组扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; //①递归实现 let result = []; let flatten = function(ary) { for(let i = 0; i < ary.length; i++){ let item = ary[i]; if (Array.isArray(ary[i])){ flatten(item); } else { result.push(item); } } return result } console.log('递归实现---',flatten(arr)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]
方法三:
扩展运算符
//数组扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; //利用扩展运算符 function flatten(arr) { var arr; while (arr.some(v => Array.isArray(v))) { //arr.some() 其中存在一个满足条件的,就会返回true,都不满足返回false arr = [].concat(...arr); } console.log(arr) return arr; } console.log('扩展运算符---',flatten(arr)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]