如何在JavaScript中同时检查最小值和最大值?

时间:2015-05-21 12:45:26

标签: javascript json performance

我不确定我是否理解正确:检索数据比对该数据运行逻辑操作要慢得多。所以,而不是:

var maxX = Math.max.apply(Math, data.map(function(o) { return o[xAxis]; }));
var minY = Math.min.apply(Math, data.map(function(o) { return o[xAxis]; }));
var maxY = Math.max.apply(Math, data.map(function(o) { return o[yAxis]; }));
var minY = Math.min.apply(Math, data.map(function(o) { return o[yAxis]; }));

我可以通过遍历data集只检查一次min / max,也可以同时检查X和Y(因为data是一个JSON对象数组案件)?这会在客户端(浏览器)或服务器(例如Node.js)中有任何性能优势吗?

感谢您的任何解释。

示例数据:

[
 { date: '10.10.2000', xAxis: 20.9, yAxis: 120 },
 { date: '11.10.2000', xAxis: 35.1, yAxis: 121 },
 { date: '12.10.2000', xAxis: 21.2, yAxis: 109 },
 { date: '13.10.2000', xAxis: 28.4, yAxis: 119 },
 { date: '14.10.2000', xAxis: 24.4, yAxis: 121 }
]

3 个答案:

答案 0 :(得分:1)

您可以使用Array.reduce一次性计算所有四个值:

var data = [
    { date: '10.10.2000', xAxis: 20.9, yAxis: 120 }, 
    { date: '11.10.2000', xAxis: 35.1, yAxis: 121 }, 
    { date: '12.10.2000', xAxis: 21.2, yAxis: 109 },
    { date: '13.10.2000', xAxis: 28.4, yAxis: 119 }, 
    { date: '14.10.2000', xAxis: 24.4, yAxis: 121 }
];

var init = {
    xMin: data[0].xAxis,
    xMax: data[0].xAxis,
    yMin: data[0].yAxis,
    yMax: data[0].yAxis
};

var result = data.reduce(function(previtem, curritem) {
    if (previtem.xMin > curritem.xAxis) previtem.xMin = curritem.xAxis;
    if (previtem.xMax < curritem.xAxis) previtem.xMax = curritem.xAxis;
    if (previtem.yMin > curritem.yAxis) previtem.yMin = curritem.yAxis;
    if (previtem.yMax < curritem.yAxis) previtem.yMax = curritem.yAxis;
    return previtem;
}, init);

console.log(result);
// { xMin: 20.9, xMax: 35.1, yMin: 109, yMax: 121 }

答案 1 :(得分:0)

您必须自己编写一个执行此遍历的函数,并返回一个数组或对象,其中包含min / max而不是单个值。据我所知,该功能不是库存实现的。

这样的功能写起来并不可怕。看看它在Min或max示例中是如何做到的,然后复制它,重用现有的min / max函数并保存两个值而不是一个。

答案 2 :(得分:0)

你可以使用Array的排序:

var data = [
 { date: '10.10.2000', xAxis: 20.9, yAxis: 120 },
 { date: '11.10.2000', xAxis: 35.1, yAxis: 121 },
 { date: '12.10.2000', xAxis: 21.2, yAxis: 109 },
 { date: '13.10.2000', xAxis: 28.4, yAxis: 119 },
 { date: '14.10.2000', xAxis: 24.4, yAxis: 121 }
];

var maxY = data.sort(function(a,b){ return b.yAxis - a.yAxis; })[0].yAxis;
var maxX = data.sort(function(a,b){ return b.xAxis - a.xAxis; })[0].xAxis;

var minY = data.sort(function(a,b){ return a.yAxis - b.yAxis; })[0].yAxis;
var minX = data.sort(function(a,b){ return a.xAxis - b.xAxis; })[0].xAxis;

console.log("maxY:",maxY,"maxX:",maxX,"minY:",minY,"minX",minX);