几种常见的数组扁平化方法
-
方案一
let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10 ]; // 基于ES6中的Array.prototype.flat()方法 // 参数:指定要提取嵌套数组的结构深度,默认值为 1。 //使用 Infinity,可展开任意深度的嵌套数组 console.log(arr.flat(Infinity));
-
方案二
// 将数组变成字符串,可直接实现数组扁平化,map方法用于将数组中的每一个值由字符串类型转换成数字类型 let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10 ]; let newArr = arr.toString().split(',').map(item => { return Number(item); }); console.log(newArr);
-
方案三
// 用JSON.stringify()将整个数组变成字符串,然后正则匹配'['和']'替换成'',就成功的扁平化了 let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10 ]; let newAry = JSON.stringify(arr).replace(/\[|\]/g, '').split(',').map(item => { return Number(item); }); console.log(newAry);
-
方案四
/*方案4:基于数组的some方法进行判断检测*/ let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10 ]; // 循环到数组里没有那种小数组就停止循环,达到了数组扁平化的效果 while (arr.some(item => Array.isArray(item))) { // concat为数组合并方法,先用...展开运算符展开后,[1,2,2],[3,4,5,5]都变成了concat方法的参数,进行多个数组的合并 arr = [].concat(...arr); } console.log(arr);
-
方案五
let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10 ]; ~ function () { function myFLat() { let result = []; // 循环数组中的每一项,不是数组的放入新数组中,是数组就继续递归调用此方法,直至不是数组 let fn = arr => { for (let i = 0; i < arr.length; i++) { if (Array.isArray(arr[i])) { fn(arr[i]); continue; } result.push(arr[i]); } } fn(this); return result; } Array.prototype.myFLat = myFLat; }() let newArr = arr.myFLat(); console.log(newArr);