在 JavaScript 中合并两个数组
2020-11-26
453
您将获得一个角色列表(数组形式)和一个剧本脚本(字符串形式)。 剧本脚本的每一行如下所示:<角色:文本>。 文本可以包含任何字符。 创建一个函数,该函数将根据角色重新分组行,对行进行编号,并以现成的文本形式返回结果(参见示例)。每组显示如下:
角色:
i) 文本
j) 文本2
...
== 换行符 ==
i 和 j 是脚本中的行号。行索引从一开始,应按照角色的顺序显示组。组之间必须有换行符,文本末尾的换行符不予考虑。
示例输入:
const roles = ["Городничий", "Аммос Федорович", "Артемий Филиппович", "Лука Лукич"];
const textLines = "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор." +
"\n" +
"Аммос Федорович: Как ревизор?" +
"\n" +
"Артемий Филиппович: Как ревизор?" +
"\n" +
"Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем." +
"\n" +
"Аммос Федорович: Вот те на!" +
"\n" +
"Артемий Филиппович: Вот не было заботы, так подай!" +
"\n" +
"Лука Лукич: Господи боже! еще и с секретным предписаньем!"
示例输出:
Городничий:
1) Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.
4) Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.
Аммос Федорович:
2) Как ревизор?
5) Вот те на!
Артемий Филиппович:
3) Как ревизор?
6) Вот не было заботы, так подай!
Лука Лукич:
7) Господи боже! еще и с секретным предписаньем!
如何在 JavaScrip 中合并两个数组?
1个回答
您可以根据给定的键进行分组并按照角色进行映射。
const
textRole = (roles, textLines) => {
const
groups = textLines.split('\n').reduce((r, s, i) => {
const [, key, value] = s.match(/(^[^:]+):\s*(.*$)/);
(r[key] = r[key] || []).push(`${i + 1}) ${value}`);
return r;
}, {});
return roles
.map((role) => [role + ':', ...groups[role], ''].join('\n'))
.join('\n');
},
roles = ["Городничий", "Аммос Федорович", "Артемий Филиппович", "Лука Лукич"],
textLines = "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор." +
"\n" +
"Аммос Федорович: Как ревизор?" +
"\n" +
"Артемий Филиппович: Как ревизор?" +
"\n" +
"Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем." +
"\n" +
"Аммос Федорович: Вот те на!" +
"\n" +
"Артемий Филиппович: Вот не было заботы, так подай!" +
"\n" +
"Лука Лукич: Господи боже! еще и с секретным предписаньем!",
result = textRole(roles, textLines).trim();
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
2020-11-26