#33 数组拍平


  • 0

    @CodeHz 不对


  • 0

    const flatten = (arr) => {
    let result = [];
    const loopArr = (arr) => {
    arr.map((item) => {
    if(item instanceof Array){
    loopArr(item);
    }else{
    result.push(item);
    }
    });
    return result;
    }
    return loopArr(arr);
    };


  • 0

    const flatten = (arr) => {
    let index = arr.findIndex((item) => {
    return item instanceof Array
    })

    if (index === -1) return arr
    arr.splice(index, 1, ...arr[index])
    return flatten(arr)
    }


  • 0

    const flatten = (arr) => {
    return arr.length?arr.toString().split(',').map((item)=>parseInt(item)):[]
    }


  • 0

    说好的接受仅包含数字的多维数组,然后测试项里来个空数组。


  • 0

    @labike const flatten = (arr) => arr.length===0?[]:arr.join().split(',').map((item) => +item); 这个是通过测试的代码。
    join这个思路真的是NB


  • 0

    const flatten = (arr) => arr.length === 0 ? [] : Array.from(arr.join().split(','), v=>v*1);


  • 0

    const flatten = arr => arr.reduce((acc, x) => acc.concat(Array.isArray(x) ? flatten(x) : x), [])
    

  • 0

    const flatten = (arr) =>{return arr.reduce(function(pre,now){return pre.concat(Array.isArray(now)? flatten(now):now)},[])}


  • 0

    请问下为什么这个不能通过测试啊?本地跑好像没问题

    const flatten = (arr) => arr.reduce((begin,current)=>{
            Array.isArray(current)?
            begin.push(...flatten(current)):
            begin.push(current);
            return begin
        },[])
    

  • 0

    const flatten = (arr) => {
    if(arr.length === 0){
    return [];
    }
    let myArr = arr.join(",").split(",").map(function (s) {
    return parseInt(s);
    });
    return myArr;
    }


  • 0

    const flatten = (arr, b = []) => {
      arr.forEach(v => Array.isArray(v) ? flatten(v, b) : b.push(v))
      return b
    }
    

  • 0

    const flatten = (arr) => {
      return new Function('arr', `return [${arr.toString()}]`)(arr);
    }
    

  • 1

    const flatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? flatten(v) : v)));
    
    

  • 0

    const flatten = (arr) =>{
    var newArr = arr.join(',').split(',').map(x => Number(x));
    if(arr.length === 0){
    return [];
    }else{
    return newArr;
    }
    }


  • 0

    @CodeHz 这个思路厉害了,颠覆了我的想象,点赞


  • 0

    // 仅包含数字的多维数组,可以用这种方案
    // 方案一
    const flatten = (arr) => {
      if(arr.length === 0){
        return arr;
      }
      var str = arr.join();
      str = str.replace(/\[|\]/g, '');
      return str.split(',').map(el => Number(el));
    }
    // 方案二 递归
    const flatten = (arr) => {
      let result = [];
      arr.forEach((el) => {
        if(Array.isArray(el)){
          result = result.concat(flatten(el));
        }
        else{
          result.push(el);
        }
      });
      return result;
    }
    
    

  • 0

    @ME
    const flatten = (arr) =>arr.length?arr.toString().split(',').map((item)=>parseInt(item)):[]


  • 0

    const flatten = (arr) => arr.flat(Infinity);
    // 一行代码可以实现 
    // 但提交状态: Runtime Error
    // 运行信息: arr.flat is not a function 
    // 想无

  • 0

    const flatten = arr => arr.reduce((p, c) => p.concat(Array.isArray(c) ? flatten(c) : c), [])
    

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待