我不确定我是否理解正确:检索数据比对该数据运行逻辑操作要慢得多。所以,而不是:
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 }
]
答案 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);