在数组数组中查找最大/最小元素的最有效方法

时间:2018-09-26 13:00:33

标签: javascript arrays web

我想知道如何有效地返回数组array中的min / max元素。我知道我可以遍历整个数组,但是我认为可能会有更好的选择。

let tab= [2];
tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}]
tab[1] ... etc

例如,我想在此数组中找到最小值或最大值。

  

我使用Math.max.apply来执行此操作,因为它引用数组,而reduce则重复数组。但是,如果您不在乎,则应完全使用reduce,如下所述。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。第一个是减少数组,保持最大值/最小值:

aspmx.l.google.com

如果我们按照以下方式展平数组,这会更容易

let tab= [2];
tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}]
tab[1] = [{name :"apple", value : 1}, {name :"spaceship", value : 200}]

console.log(
  tab.map(a=>a.reduce((a,b)=>a.value>b.value?a:b,{})).reduce((a,b)=>a.value>b.value?a:b,{})
)

上述这些函数获取最大值,要获取最小值,只需将let tab= [2]; tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}] tab[1] = [{name :"apple", value : 1}, {name :"spaceship", value : 200}] console.log( [].concat.apply([], tab).reduce((a,b)=>a.value>b.value?a:b,{}) )更改为a.value>b.value。而且,这些函数的时间复杂度为a.value<b.value,因此对于较大的数组,它将更快地运行。


另一种方法是排序并获取第一个/最后一个值

O(n)

但是,此方法更为复杂,因为它先对数组排序(O(n log n)),然后再获取第一个或最后一个元素(O(1))。