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

如何仅使用ES5将特定分类格式字符串转换为指定结构的JS对象

实现方案

实现思路

  • 先按.将字符串拆分为多个独立分类规则片段,过滤空片段避免异常
  • 每个规则片段按:拆分为名称段和分类值段
  • 分类值段按空格拆分取最后一个元素,适配第二种输入里分类值前有多余描述的场景
  • 名称段按空格拆分得到所有待映射的名称,逐个赋值到结果对象即可

ES5 实现代码

function strToCategoryObj(str) {
  var result = {};
  var ruleGroups = str.split('.');
  var i, j, group, parts, nameStr, categoryStr, category, names, curName;

  for (i = 0; i < ruleGroups.length; i++) {
    group = ruleGroups[i].trim();
    if (!group) continue;

    parts = group.split(':');
    if (parts.length < 2) continue;

    // 处理分类值:取末尾有效分类
    nameStr = parts[0].trim();
    categoryStr = parts[1].trim();
    category = categoryStr.split(' ').pop();

    // 处理多个名称映射同一个分类
    names = nameStr.split(' ');
    for (j = 0; j < names.length; j++) {
      curName = names[j].trim();
      if (curName) {
        result[curName] = category;
      }
    }
  }

  return result;
}

调用示例

// 测试第一种输入
var str1 = "Apple Banana Kiwi Orange: fruit. Tomato: vegetable";
console.log(strToCategoryObj(str1));
// 输出:{ Apple: 'fruit', Banana: 'fruit', Kiwi: 'fruit', Orange: 'fruit', Tomato: 'vegetable' }

// 测试第二种输入
var str2 = "Tomato: maybe a fruit. Apple Banana Orange: fruit. Carrots: vegetable";
console.log(strToCategoryObj(str2));
// 输出:{ Tomato: 'fruit', Apple: 'fruit', Banana: 'fruit', Orange: 'fruit', Carrots: 'vegetable' }

方案说明

你之前用split加嵌套for循环的思路是完全正确的,该方案的时间复杂度为O(N)(N为字符串内单词总数),固定两层循环没有额外性能损耗,可读性和兼容性都优于正则实现,属于最优的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:30:00