【问题标题】:find highest values for an array of hashes with common keys in javascript在javascript中找到具有公共键的哈希数组的最大值
【发布时间】:2016-12-03 08:09:57
【问题描述】:

我目前有一个带有哈希数组的 JSON 文件,并且希望能够为每个包含最高“十进制”值的匹配键“俱乐部”返回一个哈希数组(在我的 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}
]

为每个“俱乐部”返回具有最高“十进制”值的哈希。

【问题讨论】:

    标签: javascript arrays angularjs hash highest


    【解决方案1】:

    如果在结果集中找到更大的值,您可以使用哈希表并更改结果。

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

    【讨论】:

      【解决方案2】:

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

      应该可以的。

      【讨论】:

        【解决方案3】:

        如果您可以访问像 underscore 这样的库,您可以将问题简化为几个链式调用。

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-20
          • 2012-10-11
          • 1970-01-01
          • 2011-08-27
          • 2018-04-07
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          相关资源
          最近更新 更多