簡體   English   中英

“映射” Little Schemer應對編碼字節挑戰:大寫

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM