2015-09-09 105 views
0

好吧,我的問題是我在腳本中加載了這個json文件。我也正在使用d3.js數組第二列的最大值

[{"name":"object1","income":[[2013,100], [2014, 450], [2015,175]]}, {"name":"object2","income":[[2013,230], [2014, 250], [2015,375]]}] 

收入數組由一年和收入值組成。 [2013,100]意味着2013年的收入等於100美元。我的問題是我想獲得數據集收入的最大值。在這種情況下,最大值等於450. 是否可以使用d3.max函數執行此操作

非常感謝。

+1

你看到了嗎? http://stackoverflow.com/questions/10564441/how-to-find-the-max-min-of-a-nested-array-in-javascript – WhiteHat

+0

是的是的,我已經讀過它,但它不是相同的情況下,我正在尋找數組第二列的最大值 –

回答

2

如何處理普通的javascript;

var max = 0; 
var dataset = [{"name":"object1","income":[[2013,100], [2014, 450], [2015,175]]}, {"name":"object2","income":[[2013,230], [2014, 250], [2015,375]]}]; 
dataset.forEach(function(obj) { 
    obj.income.forEach(function(arr) { 
    var val = arr[1]; 
    if(val > max) { 
     max = val; 
    } 
    }); 
}); 
console.log(max); 
1

在現代瀏覽器

var data = [{ 
 
    "name": "object1", 
 
    "income": [ 
 
    [2013, 100], 
 
    [2014, 450], 
 
    [2015, 175] 
 
    ] 
 
}, { 
 
    "name": "object2", 
 
    "income": [ 
 
    [2013, 230], 
 
    [2014, 250], 
 
    [2015, 375] 
 
    ] 
 
}]; 
 

 
var max = Math.max.apply(Math, data.map(function(item) { 
 
    return item.income.reduce(function(a, b) { 
 
    return a > b[1] ? a : b[1] 
 
    }, 0) 
 
})); 
 
snippet.log(max)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

1

是的,你可以用D3做到這一點很容易,使用第二個參數d3.max這需要一個元素,它的部分返回到取最大值:

var maxIncome = d3.max(data, function(d) { 
    return d3.max(d.income, function(e) { return e[1]; }); 
}); 
0

一個解決方案,這個問題對我來說不清楚,得到每年的最大收入,或所有年份的最大收入。

var data = [{ "name": "object1", "income": [[2013, 100], [2014, 450], [2015, 175]] }, { "name": "object2", "income": [[2013, 230], [2014, 250], [2015, 375]] }], 
 

 
    // max gouped by year 
 
    max = data.reduce(function (max, o) { 
 
     o.income.forEach(function (a) { 
 
      max[a[0]] = Math.max(max[a[0]] || a[1], a[1]); 
 
     }); 
 
     return max; 
 
    }, {}), 
 

 
    // single value taken from the year object 
 
    maxTotal = Object.keys(max).reduce(function (m, k) { 
 
     return Math.max(m, max[k]); 
 
    }, Number.MIN_VALUE), 
 

 
    // single run max from all objects and years 
 
    maxAll = data.reduce(function (m, o) { 
 
     return o.income.reduce(function (mm, a) { 
 
      return Math.max(mm, a[1]); 
 
     }, m); 
 
    }, Number.MIN_VALUE); 
 

 
console.log('max', max); 
 
console.log('maxTotal', maxTotal); 
 
console.log('maxAll', maxAll);

相關問題