[英]“Mapping” Little Schemer to coderbyte challenge: Capitalize
在研究了《 The Little Schemer》的大部分內容之后,我一直在嘗試一些遞歸解決Coderbyte挑戰的方法。
經過一番擺弄之后,我投入了弊端,並認為我的upperConsIt可以遍歷數組,找到特定字母的所有實例並大寫每個實例。 最終,我將擁有一個數組,可以將其轉換為一個大寫字母的字符串。
當我嘗試使用cdr之類的shift()時,會彈出Thee錯誤。 為什么是這樣? 在這種情況下,我需要做些什么才能遞歸地使用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()')
我只是看不到這是一個類型錯誤。 數組應該是數組,對吧?
列表是2個元素['t',['e',['s',['t',null]]]]
的嵌套數組。
拆分使['t', 'e', 's', 't']
。
array.shift()
變異。 您確實應該使用如下所示的方法:
function car(cons) {
return cons[0];
}
function cdr(cons) {
return cons[1];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.