2016-11-06 65 views
1

我有這樣的陣列D3.js,怎樣才能獲得指定的鍵的最大值中的對象

data =[ 
    {id: "27", name: "Burger King", sum: "900"}, 
    {id: "4", name: "Eggs(4)", sum: "896"}, 
    {id: "5", name: "Hamburger", sum: "910"}, 
    {id: "8", name: "Mac & Cheese", sum: "761"}, 
    {id: "56", name: "McDonalds", sum: "1260"} 
]; 

我想提取的金額的最大值,並追加到L1標籤。這是我的d3.js代碼:

function add_max(){ 
d3.select('#my_ul_tag).data(data).append('li') 
    .text(function(d) { 
      return 'Max ' + d3.max(d.sum); 
    }); 

} 
    add_max(); 

這樣做是得到從所述第一對象的值的陣列中(在上述例子中900),然後把它像一個數組,並且提取的最大值,在這種情況9.所以,如果值是785,那麼它將返回8,因爲它大於7和5.字符串「Max 8」將被正確地附加到ul,但是值「8」不正確。我正在尋找的是1260的最大值。這對我來說很奇怪。 任何人都可以幫我理解這個問題嗎?謝謝!

回答

2

你的屬性是字符串,但你想將它們視爲數字。清潔這件事了正確的d3的解決方案是:

function add_max() { 
    var maxValue = d3.max(data, function(d){ 
    return +d.sum; //<-- convert to number 
    }) 
    d3.select('#my_ul_tag').append('li') 
    .text(maxValue); 
} 

運行代碼:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script data-require="[email protected]" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script> 
 
</head> 
 

 
<body> 
 
    
 
    <ul id="my_ul_tag"></ul> 
 
    
 
    <script> 
 
    var data = [{ 
 
     id: "27", 
 
     name: "Burger King", 
 
     sum: "900" 
 
    }, { 
 
     id: "4", 
 
     name: "Eggs(4)", 
 
     sum: "896" 
 
    }, { 
 
     id: "5", 
 
     name: "Hamburger", 
 
     sum: "910" 
 
    }, { 
 
     id: "8", 
 
     name: "Mac & Cheese", 
 
     sum: "761" 
 
    }, { 
 
     id: "56", 
 
     name: "McDonalds", 
 
     sum: "1260" 
 
    }]; 
 

 
    function add_max() { 
 
     var maxValue = d3.max(data, function(d){ 
 
     return +d.sum; 
 
     }) 
 
     d3.select('#my_ul_tag').append('li') 
 
     .text(maxValue); 
 
    } 
 
    
 
    add_max(); 
 
    </script> 
 
</body> 
 

 
</html>

+0

非常感謝!這工作! – Derreck

2

您可以使用reduce。此提案返回sum的數字的最大值。

var data = [{ id: "27", name: "Burger King", sum: "900" }, { id: "4", name: "Eggs(4)", sum: "896" }, { id: "5", name: "Hamburger", sum: "910" }, { id: "8", name: "Mac & Cheese", sum: "761" }, { id: "56", name: "McDonalds", sum: "1260" }], 
 
    max = data.map(function (o) { 
 
     return o.sum.split('').reduce(function (r, b) { 
 
      return r > b ? r : b; 
 
     }, 0);    
 
    }); 
 
    
 
console.log(max);

相關問題