开发者问题收集

在 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