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

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

Use this:

function arrmax(arrs) {
    var toplevel = [];

    var f = function(v) {
        return !isNaN(v);
    };

    for (var i = 0, l = arrs.length; i<l; i++) {
        toplevel.push(Math.max.apply(window, arrs[i].filter(f)));
    }
    return Math.max.apply(window, toplevel);
}

or better:

function arrmax(arrs) {
    if (!arrs || !arrs.length) return undefined;
    var max = Math.max.apply(window, arrs[0]), m,
        f = function(v){ return !isNaN(v); };
    for (var i = 1, l = arrs.length; i<l; i++) {
        if ((m = Math.max.apply(window, arrs[i].filter(f)))>max) max=m;
    }
    return max;
}

See MDN for Array.filter method details.