javascript - 我的函数会将一个值记录到控制台,但它不会返回相同的值 - 为什么?

标签 javascript arrays function recursion

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

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]]]]);

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

我很困惑 - 这是为什么?!

最佳答案

递归调用 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]]]]);

关于javascript - 我的函数会将一个值记录到控制台,但它不会返回相同的值 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874262/

相关文章:

javascript - 无法获取未定义或空引用的属性 'parentNode'

arrays - 如何使用node.js在mongodb中插入文档数组?

javascript - HTML5 Canvas - drawImage 并不总是绘制图像

javascript - 在 Javascript 中,为什么我不能用 f(f) 替换 x => f(f)(x) ?

java - 从 String[] 和 int 生成 String

python XMLRPC函数错误

改变参数数量的Java函数调用

MySQL 使用表名作为函数

javascript - firebase 云函数不会存储名为 "__session"以外的 cookie

c++ - 用相同的值填充数组,循环重置值