javascript - 通过多个属性下划线对数组中的元素进行分组
问题描述
在工作中,我被赋予了这个任务:将数组中具有相似属性的元素分组。
一般来说,问题如下:
var order = [
{
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Speed"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Discharge pressure"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Speed"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"RCU",
"equipment":"37 P 552 B",
"parameter":"Discharge pressure"
}
]
如果我按“ru”、“area”、“unit”、“tot”、“equipment”和“parameter”对这些元素进行分组,我将得到以下结果:
var result = [
{
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"tot":2,
"equipment":"37 P 552 A",
"parameter":"Speed"
}, {
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"tot":1,
"equipment":"37 P 552 A",
"parameter":"Discharge Pressure"
}, {
"ru":"R401",
"area":"RFCC",
"unit":"RCU",
"tot":1,
"equipment":"37 P 552 B",
"parameter":"Discharge Pressure"
}];
经过一些实验,我得出以下代码:
var groups = _.groupBy(order, function(value) {
return value.ru + "#" + value.area + "#" + value.unit + "#" + value.equipment + "#" + value.parameter + "#";
});
groups = _.map(groups, function(group) {
return _.extend(group[0], {tot: group.length});
});
现在我有问题如何对相似的结果元素进行分组。如果有人在这附近,请帮助我。提前致谢。
解决方案
这个怎么样:
var order = [
{
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Speed"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Discharge pressure"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"OFFSITE",
"equipment":"37 P 552 A",
"parameter":"Speed"
}, {
"tot":1,
"ru":"R401",
"area":"RFCC",
"unit":"RCU",
"equipment":"37 P 552 B",
"parameter":"Discharge pressure"
}
];
var result = [];
order.forEach(current=>{
let index = -1;
result.forEach((c,i)=>{
if (c.ru==current.ru && c.area==current.area && c.unit==current.unit && c.tot==current.tot && c.equipment==current.equipment && c.parameter==current.parameter){
index = i;
}
});
// console.log(index);
if(index==-1){
result.push(current);
}else{
result[index]["tot"] = result[index]["tot"]+current["tot"];
}
});
console.log(result);
推荐阅读
- javascript - 在 VUE 中将数据从父级传输到子级并返回
- mesh - 网格中的闭合孔 - Meshlab
- visual-studio - 如何将 UWP 项目发布为单个安装程序文件
- go - 如何有效地为 MQTT 设置连接超时?
- matrix - 在 R 中将 ddiMatrix 转换为 Bigmatrix 的有效方法
- arrays - 如何在 gnuplot 中使用带有“with”表示法的动态变量名称?
- python - 通过python中的特定模式组合两个向量
- r - 在 kmeans 图中 Dim1 和 Dim2 是什么意思?
- mysql - 我有这样的日期列“20210527181345”如何将此字符串转换为时间戳 SQL
- woocommerce - WooCommerce Flexslider 回调