Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
119
rated 0 times [  122] [ 3]  / answers: 1 / hits: 30032  / 9 Years ago, thu, june 18, 2015, 12:00:00

enter



How can I implement javascript function to calculate frequency of each word in a given sentence.



this is my code:



function search () {
var data = document.getElementById('txt').value;
var temp = data;
var words = new Array();
words = temp.split( );
var uniqueWords = new Array();
var count = new Array();


for (var i = 0; i < words.length; i++) {
//var count=0;
var f = 0;
for (j = 0; j < uniqueWords.length; j++) {
if (words[i] == uniqueWords[j]) {
count[j] = count[j] + 1;
//uniqueWords[j]=words[i];
f = 1;
}
}
if (f == 0) {
count[i] = 1;
uniqueWords[i] = words[i];
}
console.log(count of + uniqueWords[i] + - + count[i]);
}
}


am unable to trace out the problem ..any help is greatly appriciated.
output in this format:
count of is - 1
count of the - 2..



input: this is anil is kum the anil


More From » javascript

 Answers
4

I feel you have over-complicated things by having multiple arrays, strings, and engaging in frequent (and hard to follow) context-switching between loops, and nested loops.



Below is the approach I would encourage you to consider taking. I've inlined comments to explain each step along the way. If any of this is unclear, please let me know in the comments and I'll revisit to improve clarity.



(function () {

/* Below is a regular expression that finds alphanumeric characters
Next is a string that could easily be replaced with a reference to a form control
Lastly, we have an array that will hold any words matching our pattern */
var pattern = /w+/g,
string = I I am am am yes yes.,
matchedWords = string.match( pattern );

/* The Array.prototype.reduce method assists us in producing a single value from an
array. In this case, we're going to use it to output an object with results. */
var counts = matchedWords.reduce(function ( stats, word ) {

/* `stats` is the object that we'll be building up over time.
`word` is each individual entry in the `matchedWords` array */
if ( stats.hasOwnProperty( word ) ) {
/* `stats` already has an entry for the current `word`.
As a result, let's increment the count for that `word`. */
stats[ word ] = stats[ word ] + 1;
} else {
/* `stats` does not yet have an entry for the current `word`.
As a result, let's add a new entry, and set count to 1. */
stats[ word ] = 1;
}

/* Because we are building up `stats` over numerous iterations,
we need to return it for the next pass to modify it. */
return stats;

}, {} );

/* Now that `counts` has our object, we can log it. */
console.log( counts );

}());

[#66163] Tuesday, June 16, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ellisw

Total Points: 625
Total Questions: 92
Total Answers: 88

Location: Kazakhstan
Member since Mon, Sep 26, 2022
2 Years ago
;