3

how do I count the frequency of the elements in the array, I'm new to Javascript and completely lost, I have looked at other answers here but can't get them to work for me. Any help is much appreciated.

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

3 Answers 3

4

To count frequencies you should use an object which properties correspond to the letters occurring in your input string. Also before incrementing the value of the property you should previously check whether this property exists or not.

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;
}
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you, however I'm now getting the error that "TypeError: alphaResult.charAt is not a function"
Sorry, I forgot that your alphaResult is not a string, but an array. You should pass string where you want to count frequencies to my freqLet function from your alphaOnly function.
1

If you can use a third party library, underscore.js provides a function "countBy" that does pretty much exactly what you want.

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

This should return an associative array of characters in the collection mapped to a count.

Then you could filter the keys of that object to the limited character set you need, again, using underscore or whatever method you like.

Comments

1

Do as below:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.