关于ES6的flat(扁平化数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ES6的flat(扁平化数组)相关的知识,希望对你有一定的参考价值。

参考技术A 一个部门JSON数据中,属性名是部门id,属性值是个部门成员id数组集合,现在要把有部门的成员id都提取到一个数组集合中。

可以考虑使用Object.values和flat方法实现:

1、Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。
2、其中使用Infinity作为flat的参数,使得无需知道被扁平化的数组的维度。
3、flat方法不支持IE浏览器。

数组扁平化的处理

第一种:使用 es6中的flat方法

const arr = [1,[2,[3,[4,5]]],6]
//  方法一:数组自带的扁平化方法,flat的参数代表的是需要展开几层,如果是Infinity的话,就是嵌套几层,全部都展开
console.log(arr.flat(Infinity))

第二种:使用正则表达式

const arr = [1,[2,[3,[4,5]]],6]
function flatten(arr) 
    // 使用正则表达式匹配字符,并替换
    let arr1 = JSON.stringify(arr).replace( /\\[|\\]/g ,'')
    return JSON.parse('['+arr1+ ']')    

console.log(flatten(arr));

第三种:使用递归

const arr = [1,[2,[3,[4,5]]],6]
var array=[]
function flatten(arr) 
 	// 判断是否是数组
   for(let i=0 ;i<arr.length; i++) 
   
       if(Array.isArray(arr[i]))
           flatten(arr[i])
       
       else
           array.push(arr[i])
       
   
   return array
   

console.log(flatten(arr));

第四种:使用reduce

const arr = [1,[2,[3,[4,5]]],6]
var array=[]
function flatten(arr) 
    return arr.reduce((sum,value)=>
        return sum.concat(Array.isArray(value) ? flatten(value) :value)
    ,[])
   

console.log(flatten(arr));

第五种:使用 …扩展运算符

const arr = [1,[2,[3,[4,5]]],6]
function flat(arr) 
  while (arr.some(item => Array.isArray(item))) 
    arr = [].concat(...arr);
  
  return arr;

console.log(flat(arr)); 

以上是关于关于ES6的flat(扁平化数组)的主要内容,如果未能解决你的问题,请参考以下文章

数组扁平化

前端基础之数组扁平化

Review系列数组扁平化

Review系列系列数组扁平化

Review系列系列数组扁平化

JS数组扁平化(flat)