首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在javascript中找到嵌套数组的最大值/最小值?

如何在javascript中找到嵌套数组的最大值/最小值?
EN

Stack Overflow用户
提问于 2012-05-12 22:06:03
回答 6查看 37.2K关注 0票数 32

我想要找到嵌套数组的最大值,如下所示:

代码语言:javascript
运行
复制
a = [[1,2],[20,3]]
d3.max(d3.max(a)) // 20

但是我的数组包含一个我想要丢弃的文本字段:

代码语言:javascript
运行
复制
a = [["yz",1,2],["xy",20,3]]
d3.max(a) // 20
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-13 04:15:27

如果您有一个嵌套的数字数组(arrays = [[1, 2], [20, 3]]),则嵌套d3.max

代码语言:javascript
运行
复制
var max = d3.max(arrays, function(array) {
  return d3.max(array);
});

或者等效地使用array.map

代码语言:javascript
运行
复制
var max = d3.max(arrays.map(function(array) {
  return d3.max(array);
}));

如果您想忽略字符串值,可以使用array.filter忽略字符串:

代码语言:javascript
运行
复制
var max = d3.max(arrays, function(array) {
  return d3.max(array.filter(function(value) {
    return typeof value === "number";
  }));
});

或者,如果你知道字符串总是在第一个位置,你可以使用array.slice,这会更有效一些:

代码语言:javascript
运行
复制
var max = d3.max(arrays, function(array) {
  return d3.max(array.slice(1));
});

另一种选择是使用访问器函数,该函数为非数字的值返回NaN。这将导致d3.max忽略这些值。方便的是,JavaScript内置的Number函数可以做到这一点,所以您可以这样说:

代码语言:javascript
运行
复制
var max = d3.max(arrays, function(array) {
  return d3.max(array, Number);
});
票数 77
EN

Stack Overflow用户

发布于 2012-05-12 22:25:10

使用以下命令:

代码语言:javascript
运行
复制
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);
}

或者更好:

代码语言:javascript
运行
复制
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;
}

有关Array.filter方法详细信息,请参阅MDN

票数 5
EN

Stack Overflow用户

发布于 2012-05-12 23:19:21

您可以展平数组并将函数应用于每个成员

代码语言:javascript
运行
复制
Array.prototype.flatten= function(fun){
    if(typeof fun!= 'function') fun= '';
    var A= [], L= this.length, itm;
    for(var i= 0; i<L; i++){
        itm= this[i];
        if(itm!= undefined){
            if(!itm.flatten){
                if(fun) itm= fun(itm);
                if(itm) A.push(itm);
            }
            else A= A.concat(itm.flatten(fun));
        }
    }
    return A;
}

var a= [["yz", 1, 2], ["xy", 20, 3]], max=-Infinity;

var max=Math.max.apply(a, a.flatten(Number));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10564441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档