首页 > 解决方案 > Javascript:将数组中的 2 个索引组合成 1 个索引。例如 ['2', '3', '5', '(G1)', '2'] 变成 ['2', '3', '5 (G1)', '2']

问题描述

第一次在这里发帖,所以提前感谢您的帮助。我正在使用 Javascript。

我有一个数组:[ '2', '3', '5', '(G1)', '2']

我想变成['2', '3', '5 (G1)', '2']

换句话说,我想将索引 2 和 3 合并到一个索引中。每当 G1/G2/G3 出现在数组中时,我想将它与前一个数字连接起来。

这可能吗?

编辑:我之前曾尝试搜索加入和合并索引,但我没想过搜索 .reduce 或 .match 等。我也浏览了这里的其他帖子,看看之前是否有人问过类似的问题。我下次提供的细节会更加小心(即所有数组项都是字符串)。

感谢那些花时间回答的人,解决方案提供了工作。

标签: javascriptarrays

解决方案


如果 G 弦(起初没有双关语……)总是以括号开头,而其他字符串不会,那么我们可以通过该括号匹配并减少字符串。你会连续有多个丁字裤吗?

这里的步骤是:

  1. 检查每个当前值是否以 开头(G和结尾)
  2. 如果是这样,我们会将该字符串添加到之前的 valuea[a.length-1]中,并用一个空格分隔。
  3. 如果没有,我们将简单地将项目正常推送到累加器数组。
  4. 每次迭代,我们都会返回更新后的 accumulator a

这应该适用于您提供的示例:

let before = ['2', '3', '5', '(G1)', '2'];
let after = before.reduce((a,c,i) => ((i && c.slice(0,2) === "(G" && c.slice(-1) === ")" ? (a[a.length-1] = `${a[a.length-1]} ${c}`) : a.push(c)), a), []);

console.log(after);

输出:

['2', '3', '5 (G1)', '2']

这也适用于更复杂的示例,其中 G 字符串可能是第一项,因此我们将正常将其推送到数组中,并且一行中可能有多个 G 字符串:

let before = ['(G1)', '2', '3', '5', '(G2)', '(G3)', '2', '(G4)', '6'];
let after = before.reduce((a,c,i) => ((i && c.slice(0,2) === "(G" && c.slice(-1) === ")" ? (a[a.length-1] = `${a[a.length-1]} ${c}`) : a.push(c)), a), []);

console.log(after);

输出:

['(G1)', '2', '3', '5 (G2) (G3)', '2 (G4)', '6']

推荐阅读