获得数组

时间:2017-12-07 19:18:09

标签: javascript arrays typescript

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

我只将数组设置的值转换为[]类似值[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));
  });




2 个答案:

答案 0 :(得分:5)

我假设您希望从y获取具有最大值data[0].values的对象,因为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 );

答案 1 :(得分:3)

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