我有以下变量:
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/
答案 0 :(得分:2)
我建议使用Underscore库,然后很容易找到最大值:
var m = _.max(myOrganicData, function(item){
return item[1];
})
alert(m);
alert(m[1]);
答案 1 :(得分: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]
}
答案 2 :(得分: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] })