"Mapping" Little Schemer 对 coderbyte 的挑战:大写
"Mapping" Little Schemer to coderbyte challenge: Capitalize
在学习了 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 (evaluating 'array.shift()')
我只是不明白这是一个类型错误。数组应该是数组吧?
列表是 2 个元素的嵌套数组 ['t',['e',['s',['t',null]]]]
。
分裂使['t', 'e', 's', 't']
。
array.shift()
突变。你真的应该改用这样的东西:
function car(cons) {
return cons[0];
}
function cdr(cons) {
return cons[1];
}
在学习了 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 (evaluating 'array.shift()')
我只是不明白这是一个类型错误。数组应该是数组吧?
列表是 2 个元素的嵌套数组 ['t',['e',['s',['t',null]]]]
。
分裂使['t', 'e', 's', 't']
。
array.shift()
突变。你真的应该改用这样的东西:
function car(cons) {
return cons[0];
}
function cdr(cons) {
return cons[1];
}