如何从多维数组中获取每个索引的最大值-javascript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从多维数组中获取每个索引的最大值-javascript相关的知识,希望对你有一定的参考价值。

这是我第一次面对多维数组。所以我有这样的年份数组

yearArr = [
  [2019, 2018, ''],
  [2019, 2018, 2017],
  ['', 2018, 2017]
]

我需要做的是,我需要制作一个固定年份数组,例如

newYearArr = [ 2019, 2018, 2017 ]

这是我所做的

var highestValue = []

for(var i = 0; i < yearArr[0].length; i++)
           highestValue.splice(i,0,0)
           for(var j = 0; j < yearArr.length; j++)
             if(yearArr[i][j] > highestValue[i])
               highestValue[i] = yearArr[i][j]
             
           
       

但它总能带来回报

newYearArr = [2019, 2019, 2019]
答案

索引处的数组项目为空或全部相同,因此您可以对其进行迭代,并在索引处尚不存在的项目的索引处分配给组合数组:

const yearArr = [
  [2019, 2018, ''],
  [2019, 2018, 2017],
  ['', 2018, 2017]
];
const newYearArr = [];
yearArr.forEach((years) => 
  years.forEach((year, i) => 
    if (!newYearArr[i]) 
      newYearArr[i] = year;
    
  );
);
console.log(newYearArr);
另一答案

从您的问题的标题开始,我希望您希望结果为[2019, 2019, 2018],而不是[2019, 2018, 2017],因为这些是每个子数组中的最大值。假设Math.max很方便:

var newYearArr = yearArr.map(function(subarray) 
    return math.max.apply(Math, subarray);
);

实时示例:

var yearArr = [
  [2019, 2018, ''],
  [2019, 2018, 2017],
  ['', 2018, 2017]
];
var newYearArr = yearArr.map(function(subarray) 
    return Math.max.apply(Math, subarray);
);
console.log(newYearArr);
另一答案

您可以将-Infinity取为非数字,并获得每个索引位置的最大值。

const getNumber = v => typeof v === 'number' ? v : -Infinity;
var yearArr = [
  [2019, 2018, ''],
  [2019, 2018, 2017],
  ['', 2018, 2017]
],
    result = yearArr.reduce((r, a) => a.map((v, i) => Math.max(getNumber(v), getNumber(r[i]))), []);

console.log(result);

以上是关于如何从多维数组中获取每个索引的最大值-javascript的主要内容,如果未能解决你的问题,请参考以下文章

从Awk中的多维数组中的子数组获取最小值和最大值

在 Swift 中通过计数从多维数组中找到最大的数组

java中多维数组如何构造索引?

在Objective-C中搜索和获取多维数组的索引

如何在swift 3中的不同部分下显示多维数组

获取数组中最大的字谜组