【发布时间】:2015-05-19 22:37:11
【问题描述】:
在学习了 The Little Schemer 的大部分内容后,我一直在尝试一些针对 Coderbyte 挑战的递归解决方案。
经过一番摆弄后,我投入了 cons 并认为我的 upperConsIt 可以浏览数组,找到特定字母的所有实例并将每个实例大写。最终,我将有一个数组,我可以将它转换为一个字符串,其中一个字母现在大写。
当我尝试像 cdr 一样使用 shift() 时会弹出错误。为什么是这样?在这种情况下,我需要做什么才能以递归方式使用 JavaScript?
'use strict';
var newArray = [];
var originalText = 'i will eat my sausage if i can';
var arrayToProcess = textIntoArray(originalText);
function cons(a, d) {
return [a, d];
}
function textIntoArray(string) {
return string.split('');
}
function upperConsIt(array, letter) {
return array[0] === null ? null :
array[0] === letter ? cons(array[0].toUpperCase(), upperConsIt(array.shift(), letter)) :
cons(array[0], upperConsIt(array.shift(), letter));
}
upperConsIt(arrayToProcess, 'i');
console.log(arrayToProcess);
phantom.exit();
这是错误输出:
TypeError: undefined is not a constructor (evalating 'array.shift()')
我只是不明白这是一个类型错误。数组应该是数组吧?
【问题讨论】:
标签: javascript arrays recursion scheme the-little-schemer