在Javascript中为每个字符创建一个数组,并为给定字符串创建相应的字符计数

在Javascript中为每个字符创建一个数组,并为给定字符串创建相应的字符计数,javascript,function,Javascript,Function,作业问题 我的任务是编写一个函数,该函数执行以下操作:将输入作为数组,并返回数组数组: charFrequency("mississippi") === [ ['m', 1], ['i', 4], ['s', 4], ['p', 2] ] 这是我的密码。我试图做的是,对于字符串中的每个字符,检查该字符是否与结果数组中的一个字符匹配,如果匹配,则将与该字符关联的值增加1,如果不匹配,则创建该字符的新数组,并以1开始。我想合并forEach function charFrequency

作业问题 我的任务是编写一个函数,该函数执行以下操作:将输入作为数组,并返回数组数组:

charFrequency("mississippi") ===
[ ['m', 1],
  ['i', 4],
  ['s', 4],
  ['p', 2]
]
这是我的密码。我试图做的是,对于字符串中的每个字符,检查该字符是否与结果数组中的一个字符匹配,如果匹配,则将与该字符关联的值增加1,如果不匹配,则创建该字符的新数组,并以1开始。我想合并forEach

function charFrequency(string) {
  var result = [];
  string.forEach(function(char) {
    if ((string[char] === (result.forEach(function(element) {return element};)) {
      result[element][1] ++;
    } else {
      result.push([result[element], 1]);
    }
  });
  return result;
}

谢谢

使用对象可以使其更简单、更清晰,但如果确实需要,可以在以后将对象转换为2列数组:

function charFrequency(string) {
  var result = {};
  [].forEach.call(string, function(char) {
    if (!result[char]) result[char]=0; //first time seen? set 0, so we can increment
    result[char]++; // increment the char count
  });
  return result;
}

charFrequency("mississippi"); // == {m: 1, i: 4, s: 4, p: 2}

我认为如果您只使用一个对象并返回如下内容会更好:{m:1,I:4,s:4,p:2}

我在这里实现了它:

函数字符频率(myText)
{ 
var charFrequencyObject={};

对于(var i=0;我为什么要在不合适的情况下合并
forEach
approach@Bergi这只是一项要求,也是其中的一部分问题在于,换句话说,这是一个家庭作业,不是一个实际问题。提出家庭作业问题没什么错,但在这个网站上提问和回答问题的人都是专业人士,他们通常会努力寻找最有效的做事方式;你的教授让你做事是为了理解概念,而不是因为e效率。这会导致你拒绝回答,因为他们没有你想要学习的概念,或者更糟糕的是,你把代码带到课堂上,没有通过,因为你没有应用所教的概念……谢谢!我想这就是我要做的。任务只是返回一个数组数组,但我将采用这种方法,并将其转换为数组数组。两个建议:
reduce
而不是
forEach
|
而不是
if
@georg:reduce可以很好地工作,但OP需要forEach。就默认值与if值而言,您不会节省太多代码,并且可以说使用默认运算符会失去可读性。使用默认运算符通常成本更高et而不是get,默认操作符每次都会读取并设置一个冗余值,而不是读取值并可能进行设置……总之,这两种方法都没什么大不了的,在这种情况下它们都工作得很好。
function charFrequency(myText) 
{ 
    var charFrequencyObject = {};
    for(var i=0; i<myText.length; i++) 
    {
        var char = myText[i];
        if(!charFrequencyObject[char]) 
        {
            charFrequencyObject[char] = 1;
        } else {
            charFrequencyObject[char]++;
        }
    }
    return charFrequencyObject;
}


console.log( charFrequency("mississippi") );