簡體   English   中英

對象:如何返回具有最高值的屬性的名稱?

[英]Objects: How to return the name of a property with the highest value?

我有一個 function 接受名為“山”的對象數組。 它們包含名稱和海拔屬性。 目標是返回海拔最高的山的名稱。 到目前為止,這是我的代碼: 注意:不幸的是,此代碼會引發類型錯誤。

    function tallest(mountains) { 

   mountains = [
    {name: 'Mount Everest', elevation: 29029},
    {name: 'Mount Kilimanjaro', elevation: 19341 },
    {name: 'Mount Diablo', elevation: 3848 }
    ];

   var highestElevation = mountains.map(function(mountain) {
     return {
       name: mountain.name,
       highestMountain: Math.max.apply(Math, mountain.elevation)};
   });

      var tallestMountain = mountains.sort(function(a,b) {
        return b.highestElevation - a.highestElevation;
      })[0];
}

console.log(tallest()); 

返回海拔最高的山的名稱的有效解決方案是什么?

減少對所有山脈的迭代。 檢查當前海拔是否高於看到的最大值。
你真的不需要排序,因為你只是在最大值之后。

 function tallest(mountains) { mountains = [{ name: 'Mount Everest', elevation: 29029 }, { name: 'Mount Kilimanjaro', elevation: 19341 }, { name: 'Mount Diablo', elevation: 3848 } ]; var tallest = mountains.reduce(function(max,mountain) { return mountain.elevation > max.elevation? mountain: max }); return tallest.name; } console.log(tallest());

另請注意,您要求返回山的名稱。

 let mountains = [{ name: 'Mount Everest', elevation: 29029 }, { name: 'Mount Kilimanjaro', elevation: 19341 }, { name: 'Mount Diablo', elevation: 3848 } ]; let name = mountains.reduce((acc,ele)=>{ return acc.elevation<ele.elevation? ele.elevation: acc; },mountains[0])['name']; console.log(name)

這是最優化的一個,只有一次迭代:

 const mountains = [ {name: 'Mount Everest', elevation: 29029}, {name: 'Mount Kilimanjaro', elevation: 19341 }, {name: 'Mount Diablo', elevation: 3848 } ]; const getTallest = () => { let tallest = mountains[0]; mountains.forEach((mountain) => { if (mountain.elevation > tallest.elevation) { tallest = mountain; } }); return tallest; }; getTallest(mountains);

使用sort()

 function tallest(mountains) { var mountains = [ {name: 'Mount Everest', elevation: 29029}, {name: 'Mount Kilimanjaro', elevation: 19341 }, {name: 'Mount Diablo', elevation: 3848 } ]; mountains.sort((a, b) => a.elevation - b.elevation); return mountains.pop(); } console.log(tallest());

暫無
暫無

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

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