Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
811 views
in Technique[技术] by (71.8m points)

d3.js - How to find the max/min of a nested array in javascript?

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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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);
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...