我想获得最高价值的数组(只有' 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));
});

答案 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#map和apply 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);