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

如何合并数组中长度小于指定值的相邻字符串(首词独立)

短词与后续单词合并的实现方案

问题说明

需要将数组中长度小于4的单词与相邻的下一个词合并,且第一个单词始终保持独立,示例如下:

  • 输入:['about', 'my', 'projects'],输出:['about', 'my projects']
  • 输入:['something','for','something','for'],输出:['something','for something','for']

原实现中通过string.split(" ")拆分单词数组后,编写的循环出现Uncaught TypeError: Cannot read properties of undefined (reading 'length')错误,原循环代码:

for (let i = 0; i <= words.length; i++) {
  if (words[1 + i].length <= 3) {
    const joinedWords = words[1] + " " + words[1 + i];
    formattedWords.push(joinedWords);
  }
}

错误原因

  1. 索引越界:循环条件i <= words.length会导致当i等于数组长度时,1+i超出数组最大索引范围,此时访问words[1+i]会得到undefined,读取其length属性就会触发报错。
  2. 逻辑错误:固定使用words[1]进行拼接,无法遍历处理所有需要合并的短词,也没有跳过已经被合并的元素,逻辑完全不符合需求。

正确实现代码

可以通过遍历数组时判断当前元素(从第二个开始)是否为短词,若满足条件则与下一个单词合并,同时跳过已处理的下一个元素:

function mergeShortWords(words) {
  const result = [];
  // 第一个单词直接加入结果,确保独立
  if (words.length > 0) {
    result.push(words[0]);
  }
  let i = 1;
  while (i < words.length) {
    // 判断当前单词是否是短词,且存在下一个单词可合并
    if (words[i].length <= 3 && i + 1 < words.length) {
      // 合并短词与下一个单词
      result.push(`${words[i]} ${words[i + 1]}`);
      // 跳过已合并的下一个单词
      i += 2;
    } else {
      // 不满足合并条件,直接加入当前单词
      result.push(words[i]);
      i += 1;
    }
  }
  return result;
}

// 测试示例
console.log(mergeShortWords(['about', 'my', 'projects'])); 
// 输出: ['about', 'my projects']
console.log(mergeShortWords(['something','for','something','for'])); 
// 输出: ['something','for something','for']

代码逻辑说明

  1. 首先将第一个单词直接加入结果数组,确保其始终独立。
  2. 从索引1开始遍历数组:
    • 若当前单词长度≤3且存在下一个单词,则合并两者并加入结果,同时索引+2跳过已处理的下一个单词。
    • 若不满足合并条件,直接将当前单词加入结果,索引+1继续遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24