D3

2012-08-03 3 views
2

나는이 유사한 기능을 JSON 데이터와 D3를 사용하고 있습니다에서 JSON에서 최대 값을 얻기는 :D3

d3.json("http://api.json", function(jsondata) { 
var data = jsondata.map(function(d) { return d.number; }); 

이것은 내가 사용하는 경우 다음과 동일 ["2", "5", "8", "12"]

에 데이터가 발생합니다 var x = d3.scale.linear() .domain([0, d3.max(data)])

반환되는 최대 값은 12 대신 8입니다.이 값은 12가 8보다 1이지만이 값을 수정하는 방법이 확실하지 않기 때문입니다. 감사!

답변

6

d3.max자연 순서을 사용하여 최대 값을 반환합니다. 문자열 배열의 최대 값을 계산하므로 lexicographic (alphabetical) order이 사용됩니다. 비교 :

console.log("8" > "12"); // true 
console.log(8 > 12); // false 

배열의 최대 값을 계산하려면 먼저 해당 문자열을 숫자로 변환해야합니다.

원하는 경우
var data = jsondata.map(function(d) { return +d.number; }); 

, 당신은 또한 번호 문자열을 강요에서는 parseFloat,에서는 parseInt, 번호 등 다양한 방법을 사용할 수 있습니다 : 그 일을하는 편리한 방법은 단항 + 연산자입니다. 기술적으로 d3.max 호출 (d3.max(data, Number))의 일부로이 작업을 수행 할 수 있지만 일반적으로 명시 적으로 강제 변환하는 것이 더 빠르고 안전합니다.

물론 JSON을 이미 사용하고 있고 JSON이 형식화 된 serialization 형식이기 때문에 문자열이 아닌 JSON에 숫자를 저장하는 것이 더 적합 할 수도 있습니다. 그러면 타입 강요는 필요 없습니다.

+0

마이크 감사합니다. 그것은 매우 유용한 대답입니다. D3를 만들어 주셔서 감사합니다. 저는 방금 배우기 시작했고 그것을 좋아합니다. –