簡體   English   中英

在javascript中找到具有常見鍵的哈希數組的最大值

[英]find highest values for an array of hashes with common keys in javascript

我目前有一個帶有哈希數組的JSON文件,並且希望能夠為包含最高“十進制”值的每個匹配鍵“ Club”返回哈希數組(使用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”返回具有最高“十進制”值的哈希。

 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 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 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM