我有以下代码从数据库获取数据并使用HTML和FusionCharts库绘制图形。我只是在图形格式化方面遇到了一些麻烦。我希望yAxisMin比data
数组中的最小值低10个值,yAxisMax值高于10个值。
function createJSON(name, data){
return(
{
"chart": {
"caption": String(name),
"subCaption": "15-Day Prices",
"xAxisName": "Day",
"yAxisName": "Price (USD)",
"anchorRadius": "1",
"showValues": "0",
"borderThickness": "3",
"yAxisMinValue": data.value.min() - 10,
"yAxisMaxValue": data.value.max() + 10,
"theme": "fint"
},
"data": data,
}
);
}
//I'm including this for context. This is the function that returns the data array
var getHistory = function(req,res,next){
var data = [];
History.findOne({"Symbol": String(req.params.sym)}, function(err, foundHistory){
if(foundHistory){
(foundHistory.Historical).forEach(function(day){
data.push({
"label": day.Date,
"value": day.Close
});
});
res.json(createJSON(foundHistory.Name, data));
next();
}
else{
next();
}
});
};
module.exports = getHistory;
其他一切都很好。我只需要两行代码的帮助:
"yAxisMinValue": data.value.min() - 10,
"yAxisMaxValue": data.value.max() + 10,
我该怎么做?这是我的尝试,但它没有编译。
答案 0 :(得分:1)
这个怎么样?由于您的代码示例不完整,我无法自行测试。
function createJSON(name, data){
var min = Number.MAX_SAFE_INTEGER;
var max = Number.MIN_SAFE_INTEGER;
for(var i = 0; i < data.length; i++) {
if(data[i].value < min) min = data[i].value;
if(data[i].value > max) max = data[i].value;
}
...
"yAxisMinValue": min - 10,
"yAxisMaxValue": max + 10,
...
答案 1 :(得分:0)
尝试类似的东西:
"yAxisMinValue": getMinValue(data) - 10,
"yAxisMaxValue": getMaxValue(data) + 10,
function getMinValue(data)
{
var min = Number.MAX_VALUE;
for (var key in data)
{
if(data[key].value < min)
{
min = data[key].value;
}
}
return min;
}
function getMaxValue(data)
{
var max = Number.MIN_VALUE;
for (var key in data)
{
if(data[key].value > max)
{
max = data[key].value;
}
}
return max;
}
答案 2 :(得分:0)
对于1维数字数组:
JavaScript的Math.max和Math.min将分别找到其参数的最大值或最小值,因此,使用apply
调用,我们可以将数字数组应用于这些函数。
var values = [ 1, 2, 3, 4, 5 ]
Math.max.apply(null, values) // 5
Math.min.apply(null, values) // 1
其他任何事情:
如果您想要最大索引或比较非数字值,则需要自定义迭代器。
function getMax (values)
var maxIndex = -1
var max = Number.MIN_VALUE // use Number.MAX_VALUE for min
for (var i = 0; i < values.length; i++) {
if (value[i] > max) { // do your "greater than" comparison here
maxIndex = i
max = value[i]
}
}
// return what it is you need, max or maxIndex
return max
end