创建字符的频率列表

时间:2015-07-15 02:17:36

标签: javascript string object character

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"

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

尝试这样做:首先需要创建一个对象属性,然后再增加它。你做的是隐式地将对象转换为字符串并将更多的字符串数据连接到它(使用+=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;
}

答案 2 :(得分:0)

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;
    }