簡體   English   中英

通過max屬性從數組中獲取對象

[英]Get object from array by max property

我需要在JavaScript中執行C#中的內容:

var latest = versions.OrderByDescending( v => v.VersionNo).First();

我希望通過Math.max方法完成這項工作,雖然這應該是一項微不足道的任務,但我正在努力使其正確。 我已經瀏覽了網頁和幾個問題,但無法使其發揮作用。

基本上,您希望在具有最高VersionNo versions找到該對象。

聽起來像Array#reduce

var latest = versions.reduce(function(l, e) {
  return e.VersionNo > l.VersionNo ? e : l;
});

 var versions = [ {VersionNo: 3}, {VersionNo: 7}, {VersionNo: 1} ]; var latest = versions.reduce(function(l, e) { return e.VersionNo > l.VersionNo ? e : l; }); console.log(latest); 

當你按上面的方式調用它時(只有一個參數,即使用的回調), Array#reduce用前兩個條目調用你的回調,然后再為每個后續條目調用,第一個參數是前一個調用的返回值,第二個是數組中的下一個條目。 結果是最后一個回調的最終返回值。

像泥一樣清楚? 這意味着如果你在一個帶有[1, 2, 3, 4]的數組上調用它[1, 2, 3, 4]你的回調將被調用1, 2 ,然后是r, 3 ,其中r是它返回的任何內容,然后是r, 4其中r是它返回的任何內容最后一次。 (如果你給第二個參數reduce ,它使用它作為r的初始值,只是r, 1 ,然后是r, 2 ,......)

所以在上面,我們從回調中返回具有兩個參數的較高VersionNo的對象,這最終將為我們提供具有最高值的第一個。 (我說“第一個”因為如果你有多個具有相同價值的人,我們將采取第一個。)

或者在ES2015 +中:

let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);

 let versions = [ {VersionNo: 3}, {VersionNo: 7}, {VersionNo: 1} ]; let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l); console.log(latest); 

您可以使用以下內容獲取對象中屬性的最大值

var latest = (Math.max.apply(Math, versions.map(function(v) {
  return v.VersionNo;
})));

有關.map()文檔https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

這有很多答案。 由於您沒有指定我可以顯示多個選項:

  1. Jquery.grep
  2. 。地圖
  3. Math.Max

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM