【问题标题】:JavaScript/Underscore get Min Max values for All Items in ObjectJavaScript/Underscore 获取对象中所有项目的最小值最大值
【发布时间】:2015-02-09 01:15:33
【问题描述】:

我无法弄清楚如何从这个对象中获取最小值/最大值:

 "Prices" : {                                                                                                                                                                                                                                  
                "2014,1,11,0,0,0" : 1089,                                                                                                                                                                                                            
                "2014,1,12,0,0,0" : 1081,                                                                                                                                                                                                            
                "2014,1,13,0,0,0" : 1077,                                                                                                                                                                                                            
                "2014,1,14,0,0,0" : 1069,                                                                                                                                                                                                            
                "2014,1,17,0,0,0" : 1078,                                                                                                                                                                                                            
                "2014,1,18,0,0,0" : 1089,                                                                                                                                                                                                            
                "2014,1,19,0,0,0" : 1095
            }

我想获得我正在研究的数字的最小值/最大值(不是日期) _.pluck 但它需要键名,但我不知道。这是日期......有什么办法可以绕过它?

【问题讨论】:

    标签: javascript underscore.js


    【解决方案1】:

    您可以在原版 Javascript 中使用 for..in 循环或 Object.keys(),我相信 Underscore 也有某种包装器。

    var p = {
      '2014,1,11,0,0,0': 1089,
      '2014,1,12,0,0,0': 1081,
      '2014,1,13,0,0,0': 1077,
      '2014,1,14,0,0,0': 1069,
      '2014,1,17,0,0,0': 1078,
      '2014,1,18,0,0,0': 1089,
      '2014,1,19,0,0,0': 1095
    };
    var min = Number.POSITIVE_INFINITY;
    var max = Number.NEGATIVE_INFINITY;
    for (var prop in p) {
      if (p.hasOwnProperty(prop)) {
        min = Math.min(min, p[prop]);
        max = Math.max(max, p[prop]);
      }
    }
    console.log('min: ' + min);
    console.log('max: ' + max);
    

    【讨论】:

      【解决方案2】:

      您可以使用_.values(prices)。通过这种方法,您可以使用 _.keys(prices) 并将其用作正确键的查找。

      http://jsfiddle.net/x7eewf1d/2/

      虽然它可能不如其他解决方案高效,但它会让下一个开发人员(可能是你)清楚发生了什么。

      var prices = {
        '2014,1,11,0,0,0': 1089,
        '2014,1,12,0,0,0': 1081,
        '2014,1,13,0,0,0': 1077,
        '2014,1,14,0,0,0': 1069,
        '2014,1,17,0,0,0': 1078,
        '2014,1,18,0,0,0': 1089,
        '2014,1,19,0,0,0': 1095
      };
      
      var vals = _.values(prices);
      var dates = _.keys(prices);
      
      var min = _.min(vals);
      var max = _.max(vals);
      
      var minDate = dates[vals.indexOf(min)];
      var maxDate = dates[vals.indexOf(max)];;
      

      【讨论】:

        【解决方案3】:

        另一个纯 JS 选项是使用 Object.keys 获取键数组,map 获取值数组,最后使用 Math.max 获取最大值:

        var p = {
          '2014,1,11,0,0,0': 1089,
          '2014,1,12,0,0,0': 1081,
          '2014,1,13,0,0,0': 1077,
          '2014,1,14,0,0,0': 1069,
          '2014,1,17,0,0,0': 1078,
          '2014,1,18,0,0,0': 1089,
          '2014,1,19,0,0,0': 1095
        };
        
        Math.max.apply(Math, Object.keys(p).map(function(key) {return p[key]})); // 1095
        

        并获得最小值:

        Math.min.apply(Math, Object.keys(p).map(function(key) {return p[key]})); // 1069
        

        for..in 循环可能比上面的代码更多,但它可能要快得多。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-10
          • 2023-02-16
          • 1970-01-01
          • 2010-09-14
          • 2019-05-08
          • 1970-01-01
          • 2020-08-16
          • 1970-01-01
          相关资源
          最近更新 更多