在雄辯的JavaScript書中,練習4.3是關於構建列表的。現在的問題是
「Write函數第n這需要一個列表和數量,並在列表中的指定位置返回元素,或者當沒有這樣的元素未定義的。返回列表中的第n個元素 - 雄辯javascript 4.3
如果您還沒有準備好,還寫一個遞歸版本的nth。「
因此,這裏是他們的解決方案
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {value: array[i], rest: list};
return list;
}
function nth(list, n) {
if (!list)
return undefined;
else if (n == 0)
return list.value;
else
return nth(list.rest, n - 1);
}
console.log(nth(arrayToList([10, 20, 30]), 1));
// → 20
我不明白是怎麼if (!list)
被檢查,如果第n值是存在的。它看起來像是在檢查列表本身是否爲假。
關於我缺少的任何指針?
感謝
您是右側的列表中。它不檢查是否存在第n個值。它正在檢查列表是否存在。 –
@LeoFarmer它是遞歸的,如果list.rest返回列表的尾部,它將檢查下一次迭代。順便說一句,我想知道什麼是列表的結構? '{rest:{rest:rest,value:1},value:2}'?如果第n個值不存在,它將返回「未定義」,如任務中所示。 –
如何定義空列表?你會期望'n(nil,0)'或'nn({value:...,rest:nil},1)'返回什麼? – Bergi