数组扁平化的几种实现方案

1,899 阅读1分钟

数组扁平化在开发中经常遇到,有时需要对嵌套多层对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)的方法,这两个方案都比较巧妙;循环递归是常规实现方案符合一般逻辑特点。

如果本文对你有帮助,欢迎给作者点赞加关注哈哈,一起进步~