2017-09-03 48 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>

希望帮助