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

JavaScript统计数组对象中来源与告警组合的出现频次

统计JavaScript数组中来源对应告警的出现次数

嘿,这个需求很常见!我们可以用JavaScript的reduce方法来快速实现,它能帮我们遍历数组的同时,一步步构建出带frequency字段的结构化结果。

先把你的原始数组放出来方便参考:

var array = [ 
  {name: "Source_one", alertName: "Alert_1"}, 
  {name: "Source_three", alertName: "Alert_2"}, 
  {name: "Source_one", alertName: "Alert_3"}, 
  {name: "Source_two", alertName: "Alert_3"}, 
  {name: "Source_one", alertName: "Alert_3"}, 
  {name: "Source_one", alertName: "Alert_3"}, 
  {name: "Source_two", alertName: "Alert_1"}, 
  {name: "Source_one", alertName: "Alert_1"}, 
  {name: "Source_two", alertName: "Alert_1"}, 
  {name: "Source_two", alertName: "Alert_2"}, 
  {name: "Source_one", alertName: "Alert_1"}, 
  {name: "Source_two", alertName: "Alert_2"}, 
  {name: "Source_three", alertName: "Alert_3"}, 
  {name: "Source_two", alertName: "Alert_2"}, 
  {name: "Source_two", alertName: "Alert_3"}, 
  {name: "Source_three", alertName: "Alert_1"}, 
  {name: "Source_three", alertName: "Alert_1"}, 
  {name: "Source_one", alertName: "Alert_3"}, 
  {name: "Source_three", alertName: "Alert_2"}, 
  {name: "Source_three", alertName: "Alert_2"}, 
  {name: "Source_two", alertName: "Alert_1"}, 
  {name: "Source_three", alertName: "Alert_3"} 
];

下面是具体的实现代码:

const result = array.reduce((acc, current) => {
  // 先检查当前来源是否已经在累加器中存在
  const sourceEntry = acc.find(item => item.name === current.name);
  
  if (sourceEntry) {
    // 检查当前告警是否属于该来源的已统计告警
    const alertEntry = sourceEntry.alerts.find(alert => alert.alertName === current.alertName);
    if (alertEntry) {
      // 已存在则频次+1
      alertEntry.frequency++;
    } else {
      // 不存在则新增告警条目,初始频次为1
      sourceEntry.alerts.push({
        alertName: current.alertName,
        frequency: 1
      });
    }
  } else {
    // 来源不存在则新增来源条目,同时添加第一个告警记录
    acc.push({
      name: current.name,
      alerts: [{
        alertName: current.alertName,
        frequency: 1
      }]
    });
  }
  
  return acc;
}, []);

console.log(result);

逻辑说明

  • 用reduce初始化一个空数组作为累加器acc,用来存储最终的结构化结果
  • 遍历数组每一项时,分三步处理:
    1. 校验当前来源是否已被记录
    2. 若来源已存在,再校验对应告警是否已统计
    3. 存在则频次递增,不存在则新增记录;来源未存在则直接创建新的来源+告警组合

最终输出的结构化结果示例:

[
  {
    "name": "Source_one",
    "alerts": [
      { "alertName": "Alert_1", "frequency": 3 },
      { "alertName": "Alert_3", "frequency": 4 }
    ]
  },
  {
    "name": "Source_three",
    "alerts": [
      { "alertName": "Alert_2", "frequency": 3 },
      { "alertName": "Alert_3", "frequency": 2 },
      { "alertName": "Alert_1", "frequency": 2 }
    ]
  },
  {
    "name": "Source_two",
    "alerts": [
      { "alertName": "Alert_3", "frequency": 2 },
      { "alertName": "Alert_1", "frequency": 3 },
      { "alertName": "Alert_2", "frequency": 3 }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:22