How to find the max/min of a nested array in javascript?

前端 未结 6 1593
情歌与酒
情歌与酒 2020-12-08 01:04

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

6条回答
  •  春和景丽
    2020-12-08 01:28

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

提交回复
热议问题