如果我有这样的数组
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}
]
我真的不知道该怎么做。谢谢你的帮助
答案 0 :(得分:1)
使用reduce
:
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"}];
let resp = array.reduce((acc, ele) => {
var prev = acc.find(x => x.name == ele.name && x.alertName == ele.alertName);
if(prev) {
prev.frequency++;
return acc;
}
return acc.concat({name: ele.name, alertName: ele.alertName, frequency: 1})
},[]);
console.log(resp);
答案 1 :(得分:0)
reduce
。Object.values
以获得所需的输出。
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 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++;
return a;
}, {}));
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)
您可以使用name
和alertName
的嵌套哈希表。
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" }],
hash = {},
grouped = [];
array.forEach(({ name, alertName }) => {
hash[name] = hash[name] || {};
if (!hash[name][alertName]) {
hash[name][alertName] = { name, alertName, frequency: 0 };
grouped.push(hash[name][alertName]);
}
hash[name][alertName].frequency++;
});
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }