在研究了The Little Schemer的大部分内容之后,我一直在尝试一些针对Coderbyte挑战的递归解决方案。
经过一番摆弄后,我投入了缺点,并认为我的上层人员会查看一个数组,查找特定字母的所有实例并将每个字母大写。最终,我将有一个数组,我可以将其转换为一个字符串,其中一个字母现在大写。
当我尝试使用像cdr这样的shift()时,会弹出Thee ERROR。为什么是这样?在这种情况下,我需要以递归方式处理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不是构造函数(评估'array.shift()')
我只是看不出这是一个类型错误。数组应该是一个数组,对吗?
答案 0 :(得分:0)
列表是2个元素['t',['e',['s',['t',null]]]]
的嵌套数组。
拆分使['t', 'e', 's', 't']
。
array.shift()
变异。你真的应该使用这样的东西:
function car(cons) {
return cons[0];
}
function cdr(cons) {
return cons[1];
}