javascript - 在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 中合并两个数组?
解决方案
您可以按给定的键分组并映射角色。
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; }
推荐阅读
- c - Valgrind 显示块肯定会丢失记录
- python - 子进程 FileNotFoundError
- java - 类型不匹配异常:无法将字符串(java.String)转换为所需类型(java.lang.Integer)
- r - 如何修剪R中特定范围内的数据点百分比
- html - 引导轮播缩放图标错误
- rust - 按字符拆分字符串,然后在 Rust 中重新加入新的字符插入
- bash - 使用 bash 脚本登录服务器 (ssh)
- python - Crontab 不每 5 分钟执行一次我的 python 脚本
- flutter - 通过实现 reso coder flutter firebase ddd course 使用 enum_to_string 包在我的课堂上使用 enum
- c - S_ISDIR 无法识别工作目录之外的目录