【问题标题】:get the hightest value of array [duplicate]获取数组的最大值[重复]
【发布时间】:2018-05-21 23:38:08
【问题描述】:

我想得到数组的最高值(只有'y'),我该怎么做?

我只得到数组设置的值 into[] like values[0]

data = [
    {
      values: [
        { x:'2017-01', y: 1.2 },
        { x:'2017-02', y: 1.3 },
        { x:'2017-03', y: 1.5 },
        { x:'2017-04', y: 1.6 },
        { x:'2017-05', y: 1.8 },
        { x:'2017-06', y: 1.9 },
        { x:'2017-07', y: 1.5 },
        { x:'2017-08', y: 1.7 },
        { x:'2017-09', y: 1.5 },
        { x:'2017-10', y: 0 }
      ]
    }
  ];
  
  data.forEach(function(d) {
    console.log(Math.max(d.values[0].y));
  });

【问题讨论】:

  • data 数组中只有一个成员。
  • 当您想要遍历 values(或者更确切地说是 data[0].values)数组时,您正在遍历 data 数组。
  • 查看 Math.max 的工作原理...需要至少 2 个项目进行比较
  • 尝试使用data[0].values 获取实际数组,然后使用其他问题的答案获取最大值。

标签: javascript arrays typescript


【解决方案1】:

我假设您想从data[0].values 中获取具有最大值y 的对象,因为data 本身就是一个只有一个元素的数组。

如果您只想获得y (1.9) 的最大值,则可以使用Math.max,但如果您想获得最大y 的整个对象,则需要遍历再次数组以查找具有y == 1.9 的对象。

相反,您可以使用Array.prototype.reduce 一次执行这两项操作,它遍历数组,调用每个元素的回调,类似于Array.prototype.forEach,除了您在每次迭代时从回调返回的值作为参数传递给下一次迭代

data = [
    {
      values: [
        { x:'2017-01', y: 1.2 },
        { x:'2017-02', y: 1.3 },
        { x:'2017-03', y: 1.5 },
        { x:'2017-04', y: 1.6 },
        { x:'2017-05', y: 1.8 },
        { x:'2017-06', y: 1.9 },
        { x:'2017-07', y: 1.5 },
        { x:'2017-08', y: 1.7 },
        { x:'2017-09', y: 1.5 },
        { x:'2017-10', y: 0 }
      ]
    }
  ];
  
var max = data[0].values.reduce( function( maxSoFar, current ) {
    // If current.y is larger than maxSoFar.y, return current
    // so that it becomes maxSoFar for the next iteration
    return current.y > maxSoFar.y ? current : maxSoFar;
});

console.log( max );

【讨论】:

    【解决方案2】:

    values 是数组的第一个对象(索引 0)的属性 - data[0].values。使用Array#mapapply Math#max 获取所有y 值以获得最大值:

    var data = [{"values":[{"x":"2017-01","y":1.2},{"x":"2017-02","y":1.3},{"x":"2017-03","y":1.5},{"x":"2017-04","y":1.6},{"x":"2017-05","y":1.8},{"x":"2017-06","y":1.9},{"x":"2017-07","y":1.5},{"x":"2017-08","y":1.7},{"x":"2017-09","y":1.5},{"x":"2017-10","y":0}]}];
      
    var result = Math.max.apply(null, data[0].values.map(function(o) {
      return o.y;
    }));
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多