Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
61
rated 0 times [  66] [ 5]  / answers: 1 / hits: 38085  / 12 Years ago, sat, may 12, 2012, 12:00:00

I want to find the maximum of a nested array, something like this:



a = [[1,2],[20,3]]
d3.max(d3.max(a)) // 20


but my array contains a text field that I want to discard:



a = [[yz,1,2],[xy,20,3]]
d3.max(a) // 20

More From » d3.js

 Answers
3

If you have a nested array of numbers (arrays = [[1, 2], [20, 3]]), nest d3.max:



var max = d3.max(arrays, function(array) {
return d3.max(array);
});


Or equivalently, use array.map:



var max = d3.max(arrays.map(function(array) {
return d3.max(array);
}));


If you want to ignore string values, you can use array.filter to ignore strings:



var max = d3.max(arrays, function(array) {
return d3.max(array.filter(function(value) {
return typeof value === number;
}));
});


Alternatively, if you know the string is always in the first position, you could use array.slice which is a bit more efficient:



var max = d3.max(arrays, function(array) {
return d3.max(array.slice(1));
});


Yet another option is to use an accessor function which returns NaN for values that are not numbers. This will cause d3.max to ignore those values. Conveniently, JavaScript's built-in Number function does exactly this, so you can say:



var max = d3.max(arrays, function(array) {
return d3.max(array, Number);
});

[#85626] Friday, May 11, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
anikas

Total Points: 258
Total Questions: 102
Total Answers: 95

Location: Monaco
Member since Sun, Jan 16, 2022
2 Years ago
;