2016-11-06 34 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);

相关问题