【问题标题】:Creating a frequency listing of characters创建字符频率列表
【发布时间】:2015-07-15 02:17:35
【问题描述】:

charFreq 功能不太好用。撞墙。我知道我可能需要 做一个有条件的。调用该函数会返回一个对象错误。我正在尝试 将字符串放入一个空对象中,显示这样的字符 - Object
{o:4,p:5,z:2,w:4,y:1…}。顺便说一下,Javascript 新手。

刚刚意识到我不应该附加任何东西。我需要做一个 .push() 来
将数组推入对象?

function charFreq (string){ 
 var emptyObj = {};

   for(var i = 0; i < string.length; i++) {
     // console.log(string.charAt(i));
     var args = [string.charAt(i)];
     var emptyArr = [''].concat(args);
     emptyObj += emptyArr
   }

  return emptyObj 
}

undefined

charFreq('alkdjflkajdsf')

"[object Object],a,l,k,d,j,f,l,k,a,j,d,s,f"

【问题讨论】:

  • 将字符频率放入散列而不是数组。然后,您可以通过按键(字符)查找频率,而不是遍历所有字符及其频率以达到您想要的频率。
  • 非常有帮助的回复。谢谢大家。

标签: javascript string object character


【解决方案1】:

如果该特定字母不存在,则只需将 emptyObj 的键设置为 1,如果已经存在,则增加计数。

function charFreq(string) {
  var obj = {};

  for (var i = 0; i < string.length; i++) {
    if (!obj.hasOwnProperty(string[i])) {
      obj[string[i]] = 1;
    } else {
      obj[string[i]]++;
    }
  }

  return obj;
}
console.log(charFreq('alkdjflkajdsf'));

【讨论】:

  • 啊,投反对票!愿意提供建设性的反馈
  • 没有对我投反对票。你的回答似乎很好。我会发布我的只是为了展示我的编码风格。同时会支持你
【解决方案2】:

试试这个:你需要先创建一个对象属性,然后增加它。您所做的是将对象隐式转换为字符串并将更多字符串数据连接到它(使用+=concat)。

这是一个简单的方法:

function charFreq(string){ 
  var emptyObj={};
    for(var i=0; i<string.length; i++) {
      if(!emptyObj.hasOwnProperty(string[i])){ // if property doesn’t exist
        emptyObj[string[i]]=0;                 // create it and set to 0
      }
      emptyObj[string[i]]++;                   // increment it
    }
  return emptyObj;
}

【讨论】:

  • 感谢您分解此内容。
【解决方案3】:

Richard Kho 代码的修改版本:

   function charFreq(string) {
      var obj = {};

      for (var i = 0; i < string.length; i++) {
        var c=string[i];
        if (c=='') continue;
        if (obj[c]==null) obj[c]=0;
        obj[c]++;
      }

      return obj;
    }

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多