扁平化
【js实现数组扁平化】数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组。
例如
var arr = [1, [2, [3, 4,5]]];
// [1, 2, 3, 4,5]
实现方法如下
递归
let a = [1, [2, [3, 4, 5]]];
function flatten(arr) {
let result = []
for (let i = 0;
i < arr.length;
i++) {
// 如果元素是数组,数组的结果通过数组的 concat 方法拼接到最后要返回的 result 数组
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]))
console.log(result)
} else {
result.push(arr[i])
}
}
return result
}
利用 reduce 函数迭代
function flatten(arr) {
return arr.reduce((prev, next) => {
// 判断逻辑和递归中关键判断逻辑代码类似
return prev.concat(Array.isArray(next) ? flatten(next) : next)
}, [])
}
利用扩展运算符
function flatten(arr) {
//只要arr数组中还存在数组元素,循环就继续进行
while (arr.some(item => Array.isArray(item))) {
// 展开数组,拼接空数组
arr = [].concat(...arr)
}
return arr
}
split和toString()方法共同处理
function flatten(arr) {
// toString()方法把数组转换为1,2,3,4,5
return arr.toString().split(",")
}
ES6中flat方法
var newArray = arr.flat([depth])
depth 可选.指定要提取嵌套数组的结构深度,默认值为 1。
返回值 .一个包含将数组与子数组中所有元素的新数组。
Infinity表示要一直展开
function flatten(arr) {
return arr.flat(Infinity)
}
正则和 JSON 方法共同处理
function flatten(arr) {
let str = JSON.stringify(arr);
// 过滤所有的中中括号
str = str.replace(/(\[|\])/g, '');
str = '[' + str + ']';
return JSON.parse(str);
}
在线网站 https://regexper.com/ 可以把正则分析成容易理解的可视化的逻辑脑图