Skip to content

多维数组的展开 #9

@JesseZhao1990

Description

@JesseZhao1990

多维数组的展开可以有很多种写法。下面总结一下

写法1

function flatten1(arr){
  var result=[];
    for(var i=0;i<arr.length;i++){
      if(Array.isArray(arr[i])){
        result.push(...flatten1(arr[i]));
      }else{
        result.push(arr[i])
      }
    }
  return result;
}
// 测试用例
var test1 = [1,2,[3,4,[5,6,[7,8],9],10]];
console.log(flatten1(test1))
function flatten(arr){
    let result = []
    if(Array.isArray(arr)){
      arr.map(item=>{
        result = result.concat(flatten(item))
      })
    }else{
      result.push(arr);
    }
    return result;
}

var test1 = [1,2,[3,4,[5,6,[7,8],9],10]];
console.log(flatten(test1))

写法2

function flatten2(arr){
  return [].concat(...arr.map(a=> Array.isArray(a)? flatten2(a):a))
}
// 测试用例
var test2 = [1,2,[3,4,[5,6,[7,8],9],10]];
console.log(flatten2(test2));

写法3

function flatten3(arr){
  return arr.reduce(function(total,currentValue){
    return total.concat(Array.isArray(currentValue) ? flatten3(currentValue) : currentValue);
  },[])
}
// 测试用例
var test3 = [1,2,[3,4,[5,6,[7,8],9],10]];
console.log(flatten3(test3));

如果能自定义展开的深度呢?

function flatten4(arr,deep=1){
  let result = [];
  arr.forEach(a => {
    let d = deep
    if(Array.isArray(a) && d>0){
      result.push(...(flatten4(a,--d)))
    }else{
      result.push(a)
    }
  })
  return result;
}
// 测试用例
var test4 = [1,2,[2,2],[3,4,[3,3],[5,6,[7,8],9],10]];
console.log(flatten4(test4));

在线演示地址:https://codepen.io/zhaojianxin/pen/RJJGrB?editors=0012

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions