在JavaScript中计算数组中元素的频率

时间:2014-12-07 17:35:46

标签: javascript arrays frequency

我如何计算数组中元素的频率,我是Javascript的新手并完全丢失,我在这里查看了其他答案,但无法让它们为我工作。非常感谢任何帮助。

function getText() {
    var userText;
    userText = document.InputForm.MyTextBox.value; //get text as string
    alphaOnly(userText);
}

function alphaOnly(userText) {
    var nuText = userText;
    //result = nuText.split("");
    var alphaCheck = /[a-zA-Z]/g; //using RegExp create variable to have only      alphabetic characters
    var alphaResult = nuText.match(alphaCheck); //get object with only alphabetic matches from  original string
    alphaResult.sort();
    var result = freqLet(alphaResult);
    document.write(countlist);
}


function freqLet(alphaResult) {
    count = 0;
    countlist = {
        alphaResult: count
    };
    for (i = 0; i < alphaResult.length; i++) {
        if (alphaResult[i] in alphaResult)
            count[i] ++;
    }
    return countlist;
}

3 个答案:

答案 0 :(得分:2)

要计算频率,您应该使用一个对象,该对象的属性与输入字符串中出现的字母相对应。 此外,在增加属性值之前,应先检查此属性是否存在。

function freqLet (alphaResult){
  var count = {};
  countlist = {alphaResult:count};
  for (i = 0; i < alphaResult.length; i++){
    var character = alphaResult.charAt(i);
    if (count[character]) {
       count[character]++;
    } else {
       count[character] = 1;
    }
  }
  return countlist;
}

答案 1 :(得分:1)

执行以下操作:

var __arr = [6,7,1,2,3,3,4,5,5,5]

function __freq(__arr){
    var a = [], b = [], prev 
    __arr.sort((a,b)=>{return a- b} )

for(let i = 0; i<__arr.length; i++){
    if(__arr[i] !== prev){
        a.push(__arr[i])
        b.push(1)
    }else{
        b[b.length - 1]++
    }
    prev = __arr[i]
}
return [a , b]
}

答案 2 :(得分:0)

如果您可以使用第三方库,则underscore.js提供的功能“countBy”几乎可以完全满足您的需求。

_.countBy(userText, function(character) {
  return character;
});

这应该返回映射到计数的集合中的关联字符数组。

然后你可以使用下划线或任何你喜欢的方法将该对象的键过滤到你需要的有限字符集。