如何求一个不规则的二维数组的最大值

给定一个数组,例如:

var arr = [
    ['1','15','56'],
    ['1','15','56'],
    ['3','-','56'],
    ['1','78','-'],
    ['1','-','56'],
]

如图所示不规则的二维数组求其最大值,有什么优雅点的方法吗?

阅读 2.8k
3 个回答

es6很简单,如果二维数组是纯数字的话这样

const max = Math.max(...[].concat(...arr));
console.log(max)

不过我看你数组中包含-这样的字符,就要先过滤一遍

const max = Math.max(...[].concat(...arr.map(_arr => _arr.map(v => isNaN(v) ? 0 : v))));
console.log(max)

es5就乖乖循环遍历吧,怎么写都是丑的

var max = 0;
arr.forEach(function (_arr) {
  _arr.forEach(function (v) {
    if (!isNaN(v) && v > max) max = v
  })
});
console.log(max)
var arr = [
    ['1','15','56'],
    ['1','15','56'],
    ['3','-','56'],
    ['1','78','-'],
    ['1','-','56'],
];

function dparseInt(i){
  var j = parseInt(i);
  if( isNaN(j) ) return 0;
  return j;
var arr = [
    ['1','15','56'],
    ['1','15','56'],
    ['3','-','56'],
    ['1','78','-'],
    ['1','-','56'],
];

function dparseInt(i){
  var j = parseInt(i);
  if( isNaN(j) ) return 0;
  return j;
}

//数组全是字符先转为数字
var arr1 = arr.map(item=>{
  return item.map(i => dparseInt(i));
});

console.log(arr1);

//两个Math.max 搞定
var result = Math.max(...arr1.map(v=>Math.max(...v)))
console.log(result)
Math.max.apply(null, arr.map(function(el) {
    return Math.max.apply(null, el.filter(function(item) {return +item}))
}))

题主试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题