1

次の変数があります。

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/

4

3 に答える 3

2

Underscoreライブラリを使用することをお勧めします。そうすれば、 max を簡単に見つけることができます。

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

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

ここにコードがあります..

于 2013-05-20T11:36:30.827 に答える
1

私はこの機能を持っています:

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/

于 2013-05-20T12:04:03.320 に答える
1

応答が実際に多次元配列である場合、これは機能します。これを達成するためのよりきちんとした、またはより効率的な方法があると確信していますが、これは正しい方向へのプッシュになるはずです

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] 
}
于 2013-05-20T11:55:57.337 に答える