【问题标题】:Get the biggest value from a JavaScript multidimensional-array从 JavaScript 多维数组中获取最大值
【发布时间】:2013-05-20 11:29:37
【问题描述】:

我有以下变量:

response = "['2013-04-20', 10568]", "['2013-04-21', 4566]", "['2013-04-22', 14228]", "['2013-04-23', 5056]", "['2013-04-24', 25837]", "['2013-04-25', 39723]", "['2013-04-26', 37297]", "['2013-04-27', 23482]", "['2013-04-28', 31371]", "['2013-04-29', 25088]", "['2013-04-30', 27726]", "['2013-05-01', 26287]", "['2013-05-02', 15988]", "['2013-05-03', 34628]", "['2013-05-04', 13415]", "['2013-05-05', 24566]", "['2013-05-06', 33443]", "['2013-05-07', 15676]", "['2013-05-08', 18143]", "['2013-05-09', 28611]", "['2013-05-10', 46631]", "['2013-05-11', 24315]", "['2013-05-12', 15183]", "['2013-05-13', 13154]", "['2013-05-14', 9185]"

通过 php 脚本发送给我。我对它做了以下操作:

var organicJson = response.replace(/"/g,'');
organicJson = "[" + organicJson + "]";
organicJson = organicJson.replace(/'/g,'"');
var myOrganicData = JSON.parse(organicJson);

获得所需的形式(用于更多范围),它是一个多维数组。如何在 JavaScript 中遍历它并获得最大值(在上面的示例中,我认为是 46631)以及相应的日期(例如 2013-05-10)? 这是 jsfiddle 上的一个示例:http://jsfiddle.net/DanielaVaduva/PYEhK/

【问题讨论】:

  • 你可以写一个普通的for循环。
  • 变量response 中有什么?它实际上是一个数组吗?如果是,是字符串数组还是数组数组?
  • @Guffa 响应它只是一个字符串,我使用 PHP 回显函数将它发送回我的 JavaScript,然后我使用它进行最终操作...
  • @DanielacostinaVaduva:那么字符串是什么?您显示的代码在许多字符串之间使用逗号运算符,因此您最终只会得到response = "['2013-05-14', 9185]";

标签: javascript arrays string multidimensional-array


【解决方案1】:

我建议使用Underscore 库,这样很容易找到最大值:

var m = _.max(myOrganicData, function(item){
   return item[1];
})

alert(m); 
alert(m[1]); 

Here is the code..

【讨论】:

  • 是否有不使用 Underscore 1.4.3 的替代方法?
  • 好吧,那可能就写你自己的循环吧。
  • 我现在将使用 Underscore 库,非常感谢您指点我,非常感谢。 :)
【解决方案2】:

如果响应确实是一个多维数组,那么这将起作用,我确信有一种更简洁或更有效的方法来实现这一点,但这应该是朝着正确方向的推动

var response = [['2013-04-20', 10568], ['2013-04-21', 4566], ['2013-04-22', 14228], ['2013-04-23', 5056], ['2013-04-24', 25837]];

function returnLargest(multiArr){
  var lastNum, output = [];

  for(var i=0; i<multiArr.length; i++){ 
    if(!lastNum){ 
       lastNum = multiArr[i][1];
       output[0] = multiArr[i][0]; 
    } else if(lastNum < multiArr[i][1]){
      lastNum = multiArr[i][1];
      output[0] = multiArr[i][0];
    }
  }
  output.push(lastNum);
  return output;  //In this case ['2013-04-24', 25837] 
}

【讨论】:

    【解决方案3】:

    我有这个功能:

    function maxBy(array, fn) {
        return array.map(function(x) {
            return [x, fn(x)]
        }).reduce(function(max, x) {
            return x[1] > max[1] ? x : max
        })[0]
    }
    

    用法:

     maxItem = maxBy(array, function-to-return-a-property)
    

    在你的例子中:

     maxItem = maxBy(myOrganicData, function(x) { return x[1] })
    

    http://jsfiddle.net/PYEhK/2/

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 2017-11-03
      • 2012-06-24
      • 2021-10-17
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      相关资源
      最近更新 更多