JavaScript如何统计与高num值关联最频繁的标签
核心计算逻辑说明
有两种主流实现逻辑,可根据实际业务场景选择:
示例说明中「friends因绑定数值1积分被拉低」的场景,更推荐使用「标签平均幸福度」逻辑计算
- 逻辑1:标签平均幸福度
统计每个标签出现的总次数,以及所有关联条目的num总和,用总和/次数得到平均幸福度,取平均值最高的标签。示例中计算结果为:family平均5、friends平均(5+1)/2=3、school平均4,完全符合示例描述的family得分最高的结论 - 逻辑2:权重梯度积分
自定义不同num区间的加减分规则,比如num≥4加5分、num=3加1分、num≤2扣2分,累加所有标签的积分后取最高值,适合需要放大高低分差距的业务场景
实现步骤
- 第一步:遍历输入的对象数组,初始化每个标签的统计项,累计标签对应的num总和、出现次数(逻辑1)或累计对应权重积分(逻辑2)
- 第二步:遍历统计结果,计算标签的最终得分,筛选出得分最高的标签即可
JavaScript 代码示例(逻辑1实现)
function findHappiestTag(arr) { const tagStats = {}; // 第一步:统计每个标签的总幸福度和出现次数 arr.forEach(({ num, tags }) => { tags.forEach(tag => { if (!tagStats[tag]) { tagStats[tag] = { totalNum: 0, occurCount: 0 }; } tagStats[tag].totalNum += num; tagStats[tag].occurCount += 1; }); }); // 第二步:计算平均幸福度,找出最高得分标签 let maxScore = -Infinity; let result = []; Object.entries(tagStats).forEach(([tag, { totalNum, occurCount }]) => { const currentScore = totalNum / occurCount; if (currentScore > maxScore) { maxScore = currentScore; result = [tag]; } else if (currentScore === maxScore) { // 处理并列最高分的情况 result.push(tag); } }); return result.length === 1 ? result[0] : result; } // 测试示例数据 const testData = [{num: 5, tags:["friends", "family"]}, {num: 1, tags:["friends", "work"]}, {num: 4, tags:["school"]}]; console.log(findHappiestTag(testData)); // 输出结果:family
内容的提问来源于stack exchange,提问作者Lindsay E
相关产品推荐
相关产品推荐

