[英]eloquent javascript exercise 6.3
我正在學習Eloquent Javascript書籍。我堅持練習6.3 。
我需要對此行的解釋var end = reduce(Math.min, text.length, map(indexOrEnd, ["*", "{"]));
var end的目的是什么? 順便說一句,我確實知道reduce是如何工作的。
我已經看到了其他一些相關話題,但答案並不多。
這是代碼-
function splitParagraph(text) {
function indexOrEnd(character) {
var index = text.indexOf(character);
return index == -1 ? text.length : index;
}
function takeNormal() {
var end = reduce(Math.min, text.length,
map(indexOrEnd, ["*", "{"]));
var part = text.slice(0, end);
text = text.slice(end);
return part;
}
function takeUpTo(character) {
var end = text.indexOf(character, 1);
if (end == -1)
throw new Error("Missing closing '" + character + "'");
var part = text.slice(1, end);
text = text.slice(end + 1);
return part;
}
var fragments = [];
while (text != "") {
if (text.charAt(0) == "*")
fragments.push({type: "emphasised",
content: takeUpTo("*")});
else if (text.charAt(0) == "{")
fragments.push({type: "footnote",
content: takeUpTo("}")});
else
fragments.push({type: "normal",
content: takeNormal()});
}
return fragments;
}
映射並縮小的數組僅包含兩項(不是大數或動態數),因此我們可以輕松地內聯調用:
reduce(Math.min, text.length, map(indexOrEnd, ["*", "{"]))
= reduce(Math.min, text.length, [indexOrEnd("*"), indexOrEnd("{")])
= Math.min(Math.min(text.length, indexOrEnd("*")), indexOrEnd("{"))
= Math.min(text.length, indexOrEnd("*"), indexOrEnd("{"))
因此, end
將是*
或{
字符的第一個出現的索引,如果沒有字符出現,則為文本的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.