You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS数组合并需求:将@指令间的HTML标签合并为单个数组项

解决JavaScript数组中@指令间HTML标签合并问题

问题说明

我们需要处理一个混合了@开头指令和HTML标签的JavaScript数组,将相邻的所有HTML标签合并为单个数组项,同时保留@指令项的独立性。

示例:

  • 原数组:
const store = ["@if str == 'hello'", "<div>", "<h1>hello world</h1>", "</div>", "@else", "<p>Hello</p>"]
  • 期望结果:
["@if str == 'hello'", "<div><h1>hello world</h1></div>", "@else", "<p>Hello</p>"]

解决方案

使用Array.reduce()方法遍历数组,避免直接操作索引导致的错乱问题:

const store = ["@if str == 'hello'", "<div>", "<h1>hello world</h1>", "</div>", "@else", "<p>Hello</p>"];

const mergedStore = store.reduce((acc, current) => {
  // 识别@开头的指令项,直接推入结果数组
  if (current.startsWith('@')) {
    acc.push(current);
  } else {
    const lastItem = acc[acc.length - 1];
    // 若结果数组最后一项不是指令,就合并当前HTML到最后一项
    if (lastItem && !lastItem.startsWith('@')) {
      acc[acc.length - 1] = lastItem + current;
    } else {
      // 否则直接添加当前HTML项
      acc.push(current);
    }
  }
  return acc;
}, []);

console.log(mergedStore);
// 输出:["@if str == 'hello'", "<div><h1>hello world</h1></div>", "@else", "<p>Hello</p>"]

方法说明

  • 用reduce遍历数组,全程操作累加器数组,不会修改原数组,避免了直接操作索引(比如i+1)时因数组长度变化导致的索引偏移问题
  • 通过startsWith('@')判断是否为指令项,逻辑清晰
  • 对于HTML项,动态判断是否需要合并到上一个非指令项,确保所有相邻HTML都被合并成单个字符串

内容的提问来源于stack exchange,提问作者Filou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:15:24