如何在 JavaScript 中同时检查最小值和最大值? [英] How to check Min and Max values simultaneously in JavaScript?

查看:53
本文介绍了如何在 JavaScript 中同时检查最小值和最大值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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 集来检查最小值/最大值,并且可能同时检查 X 和 Y(因为 data 是一个在这种情况下的 JSON 对象数组)?这对客户端(浏览器)或服务器(例如 Node.js)有任何性能优势吗?

感谢您的解释.

示例数据:

<预><代码>[{日期:'10.10.2000',xAxis:20.9,yAxis:120},{日期:'11.10.2000',xAxis:35.1,yAxis:121},{日期:'12.10.2000',xAxis:21.2,yAxis:109},{日期:'13.10.2000',xAxis:28.4,yAxis:119},{ 日期:'14.10.2000',xAxis:24.4,yAxis:121}]

解决方案

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

var 数据 = [{日期:'10.10.2000',xAxis:20.9,yAxis:120},{日期:'11.10.2000',xAxis:35.1,yAxis:121},{日期:'12.10.2000',xAxis:21.2,yAxis:109},{日期:'13.10.2000',xAxis:28.4,yAxis:119},{ 日期:'14.10.2000',xAxis:24.4,yAxis:121}];变量初始化 = {xMin:数据[0].xAxis,xMax:数据[0].xAxis,yMin: 数据[0].yAxis,yMax:数据[0].yAxis};var 结果 = 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;返回previte;}, 在里面);控制台日志(结果);//{ xMin: 20.9, xMax: 35.1, yMin: 109, yMax: 121 }

I'm not sure if I understand correctly: retrieving data is much slower than running a logical operation on that data. So, instead of:

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

can I check for both min/max by traversing the data set only once, and perhaps check for X and Y also at the same time (since data is an array of JSON objects in this case)? And would this have any performance benefit in client(browser) or server(ex. Node.js)?

Thanks for any explanation.

Sample 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 }
]

解决方案

You can use Array.reduce to calculate all four values in one go:

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 }

这篇关于如何在 JavaScript 中同时检查最小值和最大值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆