gpt4 book ai didi

javascript - Eloquent Javascript 第 6 章中的示例 6.3 有必要这么复杂吗?

转载 作者:行者123 更新时间:2023-11-28 20:48:18 24 4
gpt4 key购买 nike

我将添加一个免责声明,除非您熟悉Eloquent Javascript,否则本文的上下文可能没有意义。 .

网络版Eloquent Javascript (Chapter 6) ,我试图理解代码示例6.3的解释。

该示例专门涵盖了 splitParagraph() 函数,但是我在代码示例中添加了所有附加函数,以使其在本文底部的示例中独立工作,但具体而言,我我试图理解为什么作者建议走很长的路来找到字符串的长度。

作者建议使用A):

var end = reduce(Math.min, text.length, map(indexOrEnd, ["*", "{"]));

为什么不直接使用B):

var end = text.length;

我尝试过使用B),结果似乎是一样的。我可以弄清楚 A) 发生了什么,但我不明白以这种方式这样做有什么意义。

这是完整的代码转储,我在底部进行了修改,以便在有人复制并粘贴它时输出它:

function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}

function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}

function map(func, array) {
var result = [];
forEach(array, function (element) {
result.push(func(element));
});
return result;
}

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;
}

console.log(splitParagraph("hello world"));

最佳答案

使用方法 A 在出现 {* 时断开字符串。因此 splitParagraph 函数将破坏包含这些字符的文本。

var x = splitParagraph("Hello boy *you're the best* friend {for me}");

x 将包含

[
{ type: "normal", content "hello boy " },
{ type: "emphasised", content "you're the best" },
{ type: "normal", content " friend " },
{ type: "footnote", content "for me" }
]

使用方法B x 将包含

[
{ type: "normal", content "Hello boy *you're the best* friend {for me}" }
]

关于javascript - Eloquent Javascript 第 6 章中的示例 6.3 有必要这么复杂吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com