Javascript:计算数组对象中的发生率

Javascript:计算数组对象中的发生率,javascript,Javascript,如果我有一个这样的数组 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

如果我有一个这样的数组

    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"}
    ]
如果我想知道单个警报每个点发生的次数,我该怎么办

我想创建这种输出:

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

我真的不知道该怎么做。感谢您的帮助

使用
减少

var数组=[{name:“Source_one”,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_2”,alertName:“Alert_3”},{name:“Source_one”,alertName:“Alert_3”},{name:“Source one”,alertName:“alertName:“Alert_3”},{name:“Source two”,alertName:“alertName:“Alert_1”},{Source one”,alertName:“Alert_1”},{name:“Source_2”,alertName:“Alert_1”},{name:“Source_2”},{name:“Source_1”},{name:“Source_2”,alertName:“Alert_2”},{name:“Source_3”,alertName:“Alert_3”},{name:“Source_2”},{name:“Source u 2”},alertName:“Alert_3”},{name:“Source,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_1”},{name:“Source_1”,alertName:“Alert_3”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_2”,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_3”};
让resp=数组。reduce((acc,ele)=>{
var prev=acc.find(x=>x.name==ele.name&&x.alertName==ele.alertName);
如果(上一个){
频率++;
返回acc;
}
返回acc.concat({name:ele.name,alertName:ele.alertName,频率:1})
},[]);
控制台日志(resp)
  • 您可以使用功能
    reduce
  • 创建用于分组对象的键
  • Object.values
    以获得所需的输出
var数组=[{name:“Source_one”,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_2”,alertName:“Alert_3”},{name:“Source_one”,alertName:“Alert_3”},{name:“Source one”,alertName:“alertName:“Alert_3”},{name:“Source two”,alertName:“alertName:“Alert_1”},{Source one”,alertName:“Alert_1”},{name:“Source_2”,alertName:“Alert_1”},{name:“Source_2”},{name:“Source_1”},{name:“Source_2”,alertName:“Alert_2”},{name:“Source_3”,alertName:“Alert_3”},{name:“Source_2”},{name:“Source u 2”},alertName:“Alert_3”},{name:“Source,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_1”},{name:“Source_1”,alertName:“Alert_3”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_2”,alertName:“Alert_1”},{name:“Source_3”,alertName:“Alert_3”};
var result=Object.values(array.reduce)(a,c)=>{
var key=[“name”,“alertName”].map(k=>c[k]).join(“|”);
(a[key]| |(a[key]={name:c.name,alertName:c.alertName,frequency:0})).frequency++;
返回a;
}, {}));
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可以为
名称
警报名称
使用嵌套哈希表

var数组=[{name:“Source_one”,alertName:“Alert_1”},{name:“Source_三”,alertName:“Alert_二”},{name:“Source_二”,alertName:“Alert_三”},{name:“Source_一”,alertName:“Alert_三”},{name:“Source u一”,alertName:“Alert三”},{name:“alertName:“Source u二”,alertName:“Alert_一”},{name:“Source_one”,alertName:“Source_1”},{name:“Source_2”},{name:“Source_2”},alertName:“Source_one”,alertName:“Alert_1”},{name:“Source_2”},alertName:“alertName:“Source_2”},{name:“Source 3”},{name:“Source u 2”},alertName:“Source u 2”},{name:“Source,alertName:“Alert_3”},{name:“Source_3”,alertName:“Alert_1”},{name:“Source_3”},{name:“Source_3”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_3”,alertName:“Alert_2”},{name:“Source_2”},alertName:“Alert_1”},{name:“Source u 3”,alertName:“警报3”}],
哈希={},
分组=[];
array.forEach(({name,alertName})=>{
哈希[名称]=哈希[名称]| |{};
如果(!hash[name][alertName]){
hash[name][alertName]={name,alertName,频率:0};
push(hash[name][alertName]);
}
hash[name][alertName].frequency++;
});
console.log(分组);

.as控制台包装{最大高度:100%!重要;顶部:0;}
输出中的
frequency
值是从哪里获得的?@AbdeslemCharif这是一个统计该警报在post第一部分的结果集中出现的次数的计数。如果frequency是该警报出现的所有次数的计数,那么在该对象的每个实例上不将其作为属性包含可能更有意义稍微干净一点,只按您想要的记录过滤结果,然后用.length进行计数。