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);
代码逻辑说明
- 外层遍历车型属性:先逐个处理
modelsList的每个属性,而不是先遍历单词数组,确保每个属性的匹配统计独立。 - 局部计数器:为每个车型初始化一个独立的
matchCount,专门统计当前车型匹配到的单词数量。 - 大小写统一匹配:用
toUpperCase()消除大小写差异,比如原数据中的Cabrio能和大写的FORTWO正确匹配。 - 更新规则:只有当匹配数大于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
相关产品推荐
相关产品推荐

