javascript - Array.push throw TypeError for array.push is not a function

标签 javascript arrays

function capitalizeFirst(arr, new_arr) {
    if (arr.length === 0) return new_arr;
    let str = arr.pop();
    console.log(str);
    return capitalizeFirst(arr, new_arr.push(str));
}

这是我的代码。目标是通过此练习练习递归。我给函数以下参数

capitalizeFirst(['car','taco','banana'], []);

new_arr 显然是一个数组。为什么 push 方法不起作用?另外,当我将返回语句更改为

return capitalizeFirst(arr, [].push(str));

然后使用 chrome 调试器,数字 1 一直传递给数组而不是 arr.pop() 值。是什么导致了这种行为?我还没有在实现中添加首字母大写。这只是我的 push 方法中的 replace() 调用,以防有人想知道为什么我的代码没有执行方法名称所声明的内容。

感谢您的帮助

最佳答案

来自 W3C:

The push() method adds new items to the end of an array, and returns the new length.

第一个循环应该没问题,但是因为您递归地传递 .push,第二个循环看到的是一个数字而不是一个数组,因为 push 返回一个数字。

推送它自己的行,然后只传递 new_arr 作为参数。

function capitalizeFirst(arr, new_arr) {
    if (arr.length === 0) return new_arr;
    let str = arr.pop();
    console.log(str);
    new_arr.push(str); // the return of .push is the array length, which is not needed. 
    return capitalizeFirst(arr, new_arr); // pass the full array into this function, making it recursive
}

关于javascript - Array.push throw TypeError for array.push is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55423187/

相关文章:

arrays - 我可以将看起来像数组内容的字符串转换为数组吗?

arrays - 将 2D 矩阵的 2D 单元(大小一致)转换为 4D matlab double

javascript - JavaScript 在 html 页面上的位置重要吗?

javascript - 如何删除jsPlumb连接

javascript - 如何调整 Jquery Mobile 中所有元素的大小以适应 iframe?

javascript - 使用哈巴狗 each 循环遍历对象数组

javascript - 如果在 javascript 数组中找不到输入的值,如何获取警报消息

javascript - 通过 xmlhttprequest 连接到 API 服务器时出现问题

javascript - 如何在自定义 Google map 上显示白色弹出框?

不同组的 PHP 返回结果