在JavaScript / HTML中访问JSON数组中的最小值和最大值

时间:2017-04-01 18:18:33

标签: javascript json

我有以下代码从数据库获取数据并使用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,

我该怎么做?这是我的尝试,但它没有编译。

3 个答案:

答案 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.maxMath.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