javascript - 为什么我的基本情况没有返回适当的数组?
问题描述
我正在练习递归,提示是“在给定单词数组的情况下编写递归函数,返回每个单词大写的新数组”。我知道迭代地处理这个非常简单,但这是为了练习递归。
function capitalizeWords (arr, i = 0) {
if (i === arr.length) return arr;
arr[i] = arr[i].toUpperCase();
capitalizeWords(arr, i+=1);
}
let words = ['i', 'am', 'learning', 'recursion'];
capitalizeWords(words);
我的函数返回undefined
。我 console.loggedarr
检查它是否得到适当的更新,并且是。但是当arr
我带着我的基本情况返回时,它似乎失去了对 arr 值的一些参考。不知道这怎么行不通。
解决方案
您只是缺少返回语句:
function capitalizeWords (arr, i = 0) {
if (i === arr.length) return arr;
arr[i] = arr[i].toUpperCase();
return capitalizeWords(arr, i+=1);
}
仅供参考 - 这也会修改原始数组。所以调用函数会改变words
数组。如果您希望它是不可变的(不影响原始words
数组),您可以执行以下操作:
function capitalizeWords (arr) {
return arr.map(function (part) {
if (Array.isArray(part)) {
return capitalizeWords(part);
}
return part.toUpperCase();
});
}
在您的问题中使用您的代码 - 这实际上是在修改words
数组。如果你运行console.log(words)
你会发现它已经改变了。
推荐阅读
- firebase - 如何检查电子邮件地址是真实的还是虚假的
- angular - 以不同方式调用 css 类时 ngClass 不起作用?
- ruby-on-rails - 为 Rails 创建内存集
- cakephp - 插件 cakephp 3.7
- javascript - JavaScript:在 If 语句后将控制台日志值推入函数的输入参数--> 引用错误
- c# - 接口成员的默认访问修饰符
- javascript - 无法使用 css 居中 javascript 创建的按钮
- arrays - 将函数映射到haskell中的列表/数组?
- jquery - jQuery隐藏和显示在一行
- c++ - 向量迭代器在 push_back() 期间不可取消引用错误