2017-09-03 46 views
1

我試圖返回最大重複字數。但由於某些原因,它不會返回最大值。下面是負責該代碼:對象不返回最大數 - JS

var max = -Infinity; 
     for(var prop in myObj){ 
      if(myObj[prop] > max){ 
      max = prop; 
      } 
     } 
     return max; 

這一次返回「H」 W/C是在單詞的第一個元素「helllo」 ......這應該是「L」 ......

現在這裏是我的整個代碼:

function findMaxRepeatCountInWord(word) { 
    var splitWord = word.split(''); 
var myObj = {}; 
for(var i = 0; i < splitWord.length; i++){ 
    if(myObj.hasOwnProperty(splitWord[i])){ 
    myObj[splitWord[i]]++; 
    }else{ 
    myObj[splitWord[i]] = 1; 
    } 
} 
    var max = -Infinity; 
    for(var prop in myObj){ 
     if(myObj[prop] > max){ 
     max = prop; 
     } 
    } 
    return max; 
} 

console.log(findMaxRepeatCountInWord('helllo')); 

任何想法我錯過了什麼?

+0

PL輕鬆,添加您的輸入數據進行測試。 –

+2

您將'prop'保存爲'max'。 'prop'是這封信。然後你將一個數字與一個字母進行比較。相反,您應該記住'maxLetter'並比較'myObj [prop]> myObj [maxLetter]' – zerkms

回答

0

max是關鍵之一。你應該利用當前密鑰prop比較該鍵的值:

if(myObj[prop] > myObj[max]) 
//    ^^^^^^ ^
2

您比較起初值,然後更改max到一個關鍵。

我建議使用max僅用於密鑰,並用鍵的第一個元素進行初始化。然後從第二個鍵開始迭代,檢查值是否爲gereater,然後是實際的最大值。

function findMaxRepeatCountInWord(word) { 
 
    var splitWord = word.split(''); 
 
    var myObj = {}; 
 
    for (var i = 0; i < splitWord.length; i++) { 
 
    if (myObj.hasOwnProperty(splitWord[i])) { 
 
     myObj[splitWord[i]]++; 
 
    } else { 
 
     myObj[splitWord[i]] = 1; 
 
    } 
 
    } 
 
    var keys = Object.keys(myObj),  // take the keys in an array 
 
     max = keys[0];     // initialize with the first key 
 
    
 
    for (i = 1; i < keys.length; i++) { // iterate from the second key 
 
    if (myObj[keys[i]] > myObj[max]) { // check and 
 
     max = keys[i];     // update 
 
    } 
 
    } 
 
    return max; 
 
} 
 

 
console.log(findMaxRepeatCountInWord('helllo'));

0

只需通過文本的每個字符循環,則發生在存儲對象

var getMaxOccurence = function (text) 
 
{ 
 
    var maxObj = {}; 
 
    // loop through each character 
 
    for (var i = 0; i < text.length; i++) 
 
    { 
 
     var char = text.charAt(i); 
 
     // check if char is in obj 
 
     if (!(char in maxObj)) 
 
     { 
 
      // add occurrence 
 
      maxObj[char] = 1; 
 
     } 
 
     else 
 
     { 
 
      // add occurrence 
 
      maxObj[char]++; 
 
     } 
 
    } 
 
    
 
    var max = { 
 
     value: 0, 
 
     key: 0 
 
    }; 
 
    var keys = Object.keys(maxObj); 
 

 
    // here get which character contains the highest value. 
 
    for (var i = 0; i < keys.length; i++) 
 
    { 
 
     if (maxObj[keys[i]] > max.value) 
 
     { 
 
     max.value = maxObj[keys[i]]; 
 
     max.key = keys[i]; 
 
     } 
 
    } 
 
    
 
    // return it 
 
    return max; 
 
}; 
 

 
document.getElementById("subject").innerHTML = "helllo"; 
 

 
var result = getMaxOccurence("helllo"); 
 
document.getElementById("result").innerHTML = result.key + " (" + result.value + ") ";
Subject: <span id="subject"></span> 
 
<br/> 
 
Max occurence: <span id="result"></span>

希望幫助