亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在javascript中編輯數組的最高5個值?

如何在javascript中編輯數組的最高5個值?

萬千封印 2022-10-13 15:47:23
我有一個存儲一系列分數的一維數組。我的最終目標是獲得 5 個最高分,并用括號括起來(例如(分數)),然后我可以格式化并輸出到顯示器上。在有重復分數的情況下,第一次出現的值將被括起來,最多為 5 個最高值。例如:[9,8,10,9,6,8,6,5,4,4,3,3,6] 將變為 [(9),(8),(10),(9), 6,(8),6,5,4,4,8,3,8]到目前為止,我嘗試過的是:var topvals = scores.sort((a,b) => b-a).slice(0,5);    for(var j=0; j< scores.length; j++){      if(topvals.length==0){        break;      }else if(topvals.includes(scores[j])){        scores[j] = "(" + scores[j] + ")";        topvals.splice(topvals.indexOf(scores[j]),1);      }    }考慮到 topvals 是一個包含前 5 個值的數組,然后我遍歷分數以查找這些值,每次都將它們刪除。這導致前 5 個分數的值在它們周圍有括號。我很高興為此走一條完全不同的路線,或者只是修復我到目前為止所做的事情。提前致謝。
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

附加索引進行排序。使用索引位置更改為所需的格式。O(N log N) 用于排序。


scores = [9,8,10,9,6,8,6,5,4,4,3,3,6]

scores.map((n,i)=>({n,i})) // each object as n: number, i: index

  .sort((a,b)=>a.n-b.n).slice(-5) // sort, slice top 5

  .forEach(({i})=>scores[i]=`(${scores[i]})`) // add parens by indexes


console.log(scores)

如果您有非常非常大的數據集并且需要更接近 O(N) 的數據,您將需要實現一個樞軸選擇算法。只是排序更簡單。



查看完整回答
反對 回復 2022-10-13
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

調用sort()排序scores就地,這意味著它改變了scores數組。所以這就是為什么你需要先克隆它,然后排序,然后切片。此外,您可能希望從分數中消除重復項。我鏈接了一個堆棧溢出答案,描述了如何做到這一點。由于 filter 不會scores就地過濾,而是返回一個新數組,因此您無需顯式調用slice(0)clone scores。


var scores = [9,8,10,9,6,8,6,5,4,4,3,3,6];


// Function from linked SO answer.

function onlyUnique(value, index, self) { 

    return self.indexOf(value) === index;

}


// Filter unique scores into copy of array, then slice the top 5.

var topvals = scores.filter(onlyUnique).sort((a,b) => b-a).slice(0,5);


for (var j=0; j< scores.length; j++) {

   if( topvals.length==0) {

        break;

   } else if(topvals.includes(scores[j])) {

        scores[j] = "(" + scores[j] + ")";

        topvals.splice(topvals.indexOf(scores[j]),1);

   }

}


查看完整回答
反對 回復 2022-10-13
  • 2 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號