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

JavaScript:统计数组元素在对象属性名中的匹配次数及代码逻辑修正

解决方案:统计每个属性名匹配的数组元素数量

你的问题核心在于使用了全局递增的计数器,导致结果是累计的匹配次数,而不是每个属性自身匹配到的单词数量。我们需要调整遍历逻辑,为每个属性单独计算匹配数:

修改后的代码

var textWord = [ 'FORTWO', 'ELECTRIC' ];
var modelsList = { 
  'FOR FOUR' : null, 
  'FOR FOUR DIESEL' : null, 
  'FOR FOUR EV' : null, 
  'FORTWO CABRIO ELECTRIC DRIVE' : null, 
  'FORTWO Cabrio' : null, 
  'FORTWO Cabrio Diesel' : null, 
  'FORTWO Coupe' : null, 
  'FORTWO Coupe Diesel' : null, 
  'ROADSTER' : null, 
  'ROADSTER Coupe' : null, 
};

// 遍历每个车型属性
for (const modelName in modelsList) {
  let matchCount = 0;
  // 检查每个目标单词是否在当前车型名中(统一大小写避免区分)
  for (const word of textWord) {
    if (modelName.toUpperCase().includes(word.toUpperCase())) {
      matchCount++;
    }
  }
  // 如果有匹配项,更新数值;否则保持null
  if (matchCount > 0) {
    modelsList[modelName] = matchCount;
  }
}

console.log(modelsList);

代码逻辑说明

  1. 外层遍历车型属性:先逐个处理modelsList的每个属性,而不是先遍历单词数组,确保每个属性的匹配统计独立。
  2. 局部计数器:为每个车型初始化一个独立的matchCount,专门统计当前车型匹配到的单词数量。
  3. 大小写统一匹配:用toUpperCase()消除大小写差异,比如原数据中的Cabrio能和大写的FORTWO正确匹配。
  4. 更新规则:只有当匹配数大于0时才更新属性值,完全不匹配的属性保留原始的null。

运行结果

执行后会得到你期望的输出:

{
  'FOR FOUR': null,
  'FOR FOUR DIESEL': null,
  'FOR FOUR EV': null,
  'FORTWO CABRIO ELECTRIC DRIVE': 2,
  'FORTWO Cabrio': 1,
  'FORTWO Cabrio Diesel': 1,
  'FORTWO Coupe': 1,
  'FORTWO Coupe Diesel': 1,
  'ROADSTER': null,
  'ROADSTER Coupe': null
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:09:04