在javascript中查找具有公共键的哈希数组的最高值
find highest values for an array of hashes with common keys in javascript
我目前有一个带有哈希数组的JSON文件,希望能够为每个匹配的键"Club"返回一个哈希数组,该键包含最高的"Decimal"值(在我的Angular应用程序中使用javascript)。
[
{"Bookmaker": "First", "Club": "Man City", "Decimal": 3.65},
{"Bookmaker": "First", "Club": "Man Utd", "Decimal": 4.5},
{"Bookmaker": "First", "Club": "Chelsea", "Decimal": 6.8}
{"Bookmaker": "Second", "Club": "Man City", "Decimal": 3.5},
{"Bookmaker": "Second", "Club": "Man Utd", "Decimal": 4},
{"Bookmaker": "Second", "Club": "Chelsea", "Decimal": 7}
]
在本例中,返回的数组如下所示:
[
{"Bookmaker": "First", "Club": "Man City", "Decimal": 3.65},
{"Bookmaker": "First", "Club": "Man Utd", "Decimal": 4.5},
{"Bookmaker": "Second", "Club": "Chelsea", "Decimal": 7}
]
为每个"Club"返回具有最高"Decimal"值的哈希。
如果在结果集中找到更大的值,则可以使用哈希表来更改结果。
var data = [{ "Bookmaker": "First", "Club": "Man City", "Decimal": 3.65 }, { "Bookmaker": "First", "Club": "Man Utd", "Decimal": 4.5 }, { "Bookmaker": "First", "Club": "Chelsea", "Decimal": 6.8 }, { "Bookmaker": "Second", "Club": "Man City", "Decimal": 3.5 }, { "Bookmaker": "Second", "Club": "Man Utd", "Decimal": 4 }, { "Bookmaker": "Second", "Club": "Chelsea", "Decimal": 7 }],
result = [];
data.forEach(function (a) {
if (a.Club in this) {
if (result[this[a.Club]].Decimal < a.Decimal) {
result[this[a.Club]] = a;
}
return;
}
this[a.Club] = result.push(a) - 1;
}, Object.create(null));
console.log(result);
var list = [
{"Bookmaker": "First", "Club": "Man City", "Decimal": 3.65},
{"Bookmaker": "First", "Club": "Man Utd", "Decimal": 4.5},
{"Bookmaker": "First", "Club": "Chelsea", "Decimal": 6.8},
{"Bookmaker": "Second", "Club": "Man City", "Decimal": 3.5},
{"Bookmaker": "Second", "Club": "Man Utd", "Decimal": 4},
{"Bookmaker": "Second", "Club": "Chelsea", "Decimal": 7}
];
var filtered = list.reduce(function(p, v){
if(!p[v.Club]){
p[v.Club] = v;
} else {
if (p[v.Club].Decimal < v.Decimal) {
p[v.Club] = v;
}
}
return p;
}, {});
//as list
filtered = Object.keys(filtered).map(function (key) {return filtered[key]});
console.log(filtered);
这应该行得通。
如果您可以访问类似下划线的库,则可以将问题简化为几个链式调用。
var list = [
{"Bookmaker": "First", "Club": "Man City", "Decimal": 3.65},
{"Bookmaker": "First", "Club": "Man Utd", "Decimal": 4.5},
{"Bookmaker": "First", "Club": "Chelsea", "Decimal": 6.8},
{"Bookmaker": "Second", "Club": "Man City", "Decimal": 3.5},
{"Bookmaker": "Second", "Club": "Man Utd", "Decimal": 4},
{"Bookmaker": "Second", "Club": "Chelsea", "Decimal": 7}
];
var maxes = [];
_.chain(list)
.groupBy(function( obj ) { return obj.Club; })
.each(function( groupedList ) {
maxes.push(_.max(groupedList, function( item ) {
return item.Decimal;
}));
});
// maxes array will now have the three objects with the highest Decimal
相关文章:
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 将元素排列到哈希数组中
- 如何使用哈希对数组进行排序
- 如何将值存储在哈希图/数组中以便稍后进行比较
- 我怎样才能优雅地更新哈希数组中的值
- 有没有一种漂亮的方法可以将列表/哈希数组转换为可用的字符串
- 在哈希数组中保存对 jquery 元素的引用
- 哈希数组上的车把 JS
- 使用多个分组依据查找哈希数组的平均值
- 将哈希数据传递给javascript
- 迭代javascript哈希数组的最佳方式
- 使用对象的属性作为键将对象添加到哈希/数组
- 在Javascript中按值排序哈希/数组
- Es6哈希数组索引函数调用混合语法
- JavaScript中高效的内存哈希数组
- 在javascript中查找具有公共键的哈希数组的最高值
- Ruby中的嵌套循环,哈希和数组
- 在javascript中创建一个哈希数组
- 根据键属性合并不相同长度的哈希数组
- 将数组的数组重组为哈希数组并转换为JSON