我的数据数组:
var data = [{glazed: 3.50, jelly: 4.50, powdered: 1.00, sprinkles: 3.50, age: 21, responses: 2,name:"test"},
{glazed: 2.83, jelly: 3.50, powdered: 1.83, sprinkles: 4.50, age: 22, responses: 6,name:"test"},
{glazed: 3.25, jelly: 4.75, powdered: 2.25, sprinkles: 3.50, age: 23, responses: 4,name:"test"},
{glazed: 1.50, jelly: 4.00, powdered: 2.50, sprinkles: 4.00, age: 25, responses: 2,name:"test"}];
Run Code Online (Sandbox Code Playgroud)
如果我想找到玻璃或果冻或粉末或洒水的范围用于缩放,我会使用如下代码..
var x = d3.scale.linear()
.domain(d3.extent(data, function (d) {
return d.glazed;//or jelly etc..
}))
.range([0, width]);
Run Code Online (Sandbox Code Playgroud)
我需要做些什么才能获得釉面,果冻,粉末和洒水中所有值的范围,而不是所有不是年龄,响应和名称的值.
这是因为json文件是动态创建的,所以我不知道除了年龄,响应和名称之外的键值.
所以,我的要求是它应该给我最小1.5(从上釉)和最大4.75(从果冻)
任何帮助都是真诚的感谢..
谢谢
var x = d3.scale.linear()
.domain(d3.extent(data.map(function (item) {
return (item.glazed);
})))
.range([0, width]);
Run Code Online (Sandbox Code Playgroud)
map() 回报 [3.5, 2.83, 3.25, 1.5]
extent() 回报 [1.5, 3.5]
如果你需要所有属性的绝对最小值和最大值data,你应该连接数组:
var x = d3.scale.linear()
.domain(d3.extent(
[].concat(data.map(function (item) {
return (item.glazed);
}), data.map(function (item) {
return (item.jelly);
}), data.map(function (item) {
return (item.powdered);
}), data.map(function (item) {
return (item.sprinkles);
}))))
.range([0, width]);
Run Code Online (Sandbox Code Playgroud)
最后,如果您有宝贵的属性列表,则应更换[].concat(...)通过匿名函数表达式,并立即调用它是这样的:function(array, names){...}(data, temp).您应该知道,在JavaScript array.property和array["property"]- 是相同的调用.
var temp = ["glazed", "jelly", "powdered", "sprinkles"];
var width = 1000;
var data = [{glazed: 3.50, jelly: 4.50, powdered: 1.00, sprinkles: 3.50, age: 21, responses: 2,name:"test"},
{glazed: 2.83, jelly: 3.50, powdered: 1.83, sprinkles: 4.50, age: 22, responses: 6,name:"test"},
{glazed: 3.25, jelly: 4.75, powdered: 2.25, sprinkles: 3.50, age: 23, responses: 4,name:"test"},
{glazed: 1.50, jelly: 4.00, powdered: 2.50, sprinkles: 4.00, age: 25, responses: 2,name:"test"}];
var x = d3.scale.linear()
.domain(d3.extent(
function(array, names){
var res = [];
array.forEach(function(item){
names.forEach(function(name){
res = res.concat(item[name]);
});
});
return(res);
}(data, temp)
))
.range([0, width]);
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/v5qzuuhj/