![](/img/trans.png)
[英]Most computationally efficient way to find last element in a JavaScript Array?
[英]Most efficient way to find max/min element in array of array
我想知道如何才能有效地返回數組array中的min / max元素。 我知道我可以遍歷整個數組,但是我認為可能會有更好的選擇。
let tab= [2];
tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}]
tab[1] ... etc
我想例如在此數組中找到最小值或最大值。
我使用Math.max.apply來執行此操作,因為它引用數組,同時減少重復數組。 但是,如果您不在乎,則應完全使用reduce,如下所述。
有很多方法可以做到這一點。 第一個是減少保持最大/最小值的數組:
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
a.value<b.value
。 而且,這些函數的時間復雜度為O(n)
因此對於較大的數組,它將更快地工作。
另一種方法是排序並獲得第一個/最后一個值
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).sort((a,b)=>b.value-a.value)[0] )
但是,此方法更為復雜,因為它先對數組排序(O(n log n)),然后再獲取第一個或最后一個元素(O(1))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.