首页 > 解决方案 > 在javascript中合并两个数组

问题描述

您将获得一个作为数组的角色列表和一个作为字符串的播放脚本。播放脚本的每一行给出如下:<Role: text>。文本可以包含任何字符。创建一个函数,该函数将根据角色重新组合行,对它们进行编号并以现成文本的形式返回结果(参见示例)。每个组显示如下:

角色:

i) 文本

j) 文本2

...

==换行==

i 和 j 是脚本中的行号。行索引从一个开始,组应该按照角色的顺序显示。组之间需要换行,文本末尾的换行不考虑在内。

样本输入:

const roles = ["Городничий", "Аммос Федорович", "Артемий Филиппович", "Лука Лукич"];

const textLines = "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор." +
"\n" +
"Аммос Федорович: Как ревизор?" +
"\n" +
"Артемий Филиппович: Как ревизор?" +
"\n" +
"Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем." +
"\n" +
"Аммос Федорович: Вот те на!" +
"\n" +
"Артемий Филиппович: Вот не было заботы, так подай!" +
"\n" +
"Лука Лукич: Господи боже! еще и с секретным предписаньем!"

样本输出:

Городничий: 
1) Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор. 
4) Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.

Аммос Федорович: 
2) Как ревизор? 
5) Вот те на! 

Артемий Филиппович: 
3) Как ревизор? 
6) Вот не было заботы, так подай!

Лука Лукич:
7) Господи боже! еще и с секретным предписаньем!

如何在 JavaScrip 中合并两个数组?

标签: javascriptarraysmerge

解决方案


您可以按给定的键分组并映射角色。

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


推荐阅读