对象不返回最大数字 - JS

时间:2017-09-03 20:33:13

标签: javascript object

我试图返回最大的重复单词。但由于某种原因,它不会返回最大值。这是负责的代码:

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'));

知道我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

您首先比较一个值,然后将max更改为键。

我建议只使用max作为键,并使用键的第一个元素进行初始化。然后从第二个键迭代并检查该值是否为gereater,然后是实际的最大值。

&#13;
&#13;
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'));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

max是其中一个关键。您应该将该密钥的值与当前密钥prop进行比较:

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

答案 2 :(得分:0)

只需遍历文本的每个字符,然后将事件存储在对象

&#13;
&#13;
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 + " ) ";
&#13;
Subject: <span id="subject"></span>
<br/>
Max occurence: <span id="result"></span>
&#13;
&#13;
&#13;

希望有所帮助