我正在嘗試回傳傳遞陣列的模式。我已經閱讀了很多關于 for in 回圈的內容,但是由于這些示例中使用了 es6 語法,我很難理解如何使用這個回圈。我的問題:我想回傳所有物件對中具有最高值的鍵。
即具有以下物件:
{ '4': 1, '6': 1, '7': 1, '8': 1, '10': 2, '12': 3 }
我想回傳包含最高值的鍵。在這種情況下,它將是 12,因為 3 是對中的最高值。
是否可以以類似于遍歷陣列以查找最高值的方式使用 for in 回圈。(我知道非陣列物件的索引方式與陣列不同,但我需要將一個 key:value 對與回圈中的下一個進行比較,但不確定如何編碼)。IE:
let highest = 0;
for(const x in count){
if(count[x 1] > count[x]){
highest = count[x][i 1];
}
當我傳遞下面的代碼時,它回傳 0,所以我假設 For In 回圈沒有按預期作業。
完整代碼供參考:
function highestRank(arr){
const count = {};
for(let i=0; i<arr.length; i ){
if(count.hasOwnProperty(arr[i]) === false){
count[arr[i]]= 1;
}else{
count[arr[i]] = 1;
}
}
//code below is the issue
let highest = 0;
for(const x in count){
if(count[x 1] > count[x]){
highest = count[x][i 1];
}
}
return highest;
}
uj5u.com熱心網友回復:
傳統回圈版本,使用變數greatest及其各自key,回圈物件屬性
const count = { '4': 1, '6': 1, '7': 1, '8': 1, '10': 2, '12': 3 };
let greatest = -Infinity;
let key;
for (let x in count) {
if (count[x] > greatest) {
key = x;
greatest = count[key];
}
}
console.log(key, greatest);
uj5u.com熱心網友回復:
您可以將 Object.entries 與 reduce 結合使用,并在 cumulator 中使用 maxKey 和 maxValue 保持物件;
const data = { '4': 1, '6': 1, '7': 1, '8': 1, '10': 2, '12': 3 };
const max = Object.entries(data).reduce(({maxKey, maxValue = -Infinity}, [key, value]) => {
if(value > maxValue){
maxValue = value;
maxKey = key;
}
return {maxKey, maxValue}
}, {});
console.log(max);
編輯:(短版)
const data = { '4': 1, '6': 1, '7': 1, '8': 1, '10': 2, '12': 3 };
const max = Object.entries(data).reduce(([maxKey, maxValue], [key, value]) =>
value > maxValue ? [key, value] : [maxKey, maxValue]
);
const maxShort = Object.entries(data).reduce((a, c) => c[1] > a[1]? c : a);
console.log(maxShort);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400337.html
標籤:javascript for循环 目的
