数组扁平化(flatten)实现方案

红太狼 2022-11-03 15:25 249阅读 0赞
  1. [1,2,3,[1,2,3,[1,2]]] => [1, 2, 3, 1, 2, 3, 1, 2]

上面的转换就是数组的扁平化,将一个嵌套多层的数组 array 转换为只有一层的数组。 下面是实现数组扁平化的几种简单方法。

1. 递归

  1. function flatten1(arr){
  2. let result = [];
  3. for(var i =0;i<arr.length;i++){
  4. if(Array.isArray(arr[i])){
  5. result = result.concat(flatten1(arr[i]));
  6. }else{
  7. result.push(arr[i]);
  8. }
  9. }
  10. return result;
  11. }
  12. flatten1([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

2. toString

  1. function flatten2(arr){
  2. arr = arr.join(',').split(',');
  3. arr = arr.map(item=>+item); //将被转成字符串的数字转换回去;
  4. return arr;
  5. }
  6. flatten2([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

3. reduce()

  1. function flatten3(arr){
  2. return arr.reduce((prev,next)=>{
  3. return prev.concat(Array.isArray(next)? flatten3(next) : next);
  4. },[])
  5. }
  6. flatten3([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

4. concat()

  1. function flatten4(arr) {
  2. return !Array.isArray(arr) ? arr : [].concat.apply([], arr.map(flatten4));
  3. }
  4. flatten4([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

5. arr.flat()

  1. //arr.flat() 会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
  2. //Infinity 无穷大, -Infinity无穷小
  3. function flatten5(arr){
  4. return arr.flat(Infinity);
  5. }
  6. flatten5([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

6. JSON

  1. function flatten6(arr){
  2. let str = JSON.stringify(arr);
  3. let str1 = str.replace(/\[|\]/g,'');
  4. let arr1 = str1.split(',');
  5. return arr1.map(item=>+item);//将被转成字符串的数字转换回去;
  6. }
  7. flatten6([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

发表评论

表情:
评论列表 (有 0 条评论,249人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数组扁平

    概念:用于将嵌套多层的数组“拉平”,变成一维的数组 方法一:通过concat将二维数组转化为一维数组 原理:通过将扩展运算符,将数组内部展开,并通过concat连接两个