【问题标题】:My function will log a value to the console, but it won't return the same value - why? [duplicate]我的函数会将一个值记录到控制台,但它不会返回相同的值 - 为什么? [复制]
【发布时间】:2015-09-01 15:59:04
【问题描述】:

我创建了以下函数来展平嵌套数组:

function steamroller(arr) {

  arr = arr.reduce(function(a, b, i){
    return a.concat(b); 
    },[]);

  if (!Array.isArray(arr[arr.length-1])) {console.log(arr); return arr;}

  steamroller(arr); 
}

steamroller([1, [2], [3, [[4]]]]);

代码会将一个很好地展平的数组记录到控制台,但函数返回“未定义”。

我被难住了——这是为什么?!

【问题讨论】:

    标签: javascript arrays function recursion


    【解决方案1】:

    您在递归调用 steamroller 时缺少返回。固定代码:

    function steamroller(arr) {
    
      arr = arr.reduce(function(a, b, i){
        return a.concat(b); 
        },[]);
    
      if (!Array.isArray(arr[arr.length-1])) {console.log(arr); return arr;}
    
      return steamroller(arr); 
    }
    
    steamroller([1, [2], [3, [[4]]]]);
    

    【讨论】:

      【解决方案2】:

      即使没有返回也为我工作(Firefox)

      【讨论】:

      • 由于第五行中的控制台日志语句,它对您“工作”,OP 说它工作正常。
      • 如果我发出警报(steamroller([1, [2], [3, [[4]]]]));我还在警报中看到相同的输出。这表明压路机方法返回的值与 console.log 相同。
      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 2022-01-15
      • 2017-02-11
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多