数组扁平化在开发中经常遇到,有时需要对嵌套多层对feed进行平铺等就会用到。本文总结了数组扁平化常见的几种方案。
实现方案
1.使用es6 flat
function flatteningArray(arr) {
return arr.flat(Infinity)
}
//验证
const arr = [1, 2, [3, 4, [5, 6, [7, 8]]]]
console.log('数组扁平化', flatteningArray(arr));
验证效果
2.利用数组toString()转字符串
function flatteningArray(arr) {
return arr.toString().split(',').map((item) => parseFloat(item))
}
//验证
const arr = [1, 2, [3, 4, [5, 6, [7, 8]]]]
console.log('数组扁平化 toString', flatteningArray(arr));
验证效果:
3.循环递归方法
function flatteningArray(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatteningArray(arr[i]));
} else {
result.push(arr[i])
}
}
return result;
}
//验证
const arr = [1, 2, [3, 4, [5, 6, [7, 8]]]]
console.log('数组扁平化 循环递归', flatteningArray(arr));
验证效果
4.数组some + [].concat(...arr)
function flatteningArray(arr) {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr;
}
//验证
const arr = [1, 2, [3, 4, [5, 6, [7, 8]]]]
console.log('数组扁平化 数组some方法', flatteningArray(arr));
总结
比较下来,flat方法比较简洁,是官方标准未来的趋势。如果考虑到兼容性可以使用toString或者数组some + [].concat(...arr)的方法,这两个方案都比较巧妙;循环递归是常规实现方案符合一般逻辑特点。
如果本文对你有帮助,欢迎给作者点赞加关注哈哈,一起进步~