我想实现一个javascript程序,通过单词计算并返回单词及其出现的次数,例如{hello:2,“@ hello”:1,world:1,toString:1}
下面是我的代码,但我只得到了总字数
function words(str) {
app = {};
return str.split(" ").length;
}
console.log(words("hello world"));
答案 0 :(得分:10)
使用reduce来迭代单词数组,并计算实例:
function words(str) {
return str.split(" ").reduce(function(count, word) {
count[word] = count.hasOwnProperty(word) ? count[word] + 1 : 1;
return count;
}, {});
}
console.log(words("reserved words like prototype and toString ok? Yes toString is fine"));
答案 1 :(得分:2)
一种ES6方法,可以减少字符串等项目数组并返回计数:
const strFrequency = function (stringArr) {
return stringArr.reduce((count, word) => {
count[word] = (count[word] || 0) + 1;
return count;
}, {})
}
let names = ["Bob", "Bill", "Bo", "Ben", "Bob", "Brett", "Ben", "Bill", "Bo", "Ben", "Bob", "Ben"];
console.log(strFrequency(names));
// => {Bob: 3, Bill: 2, Bo: 2, Ben: 4, Brett: 1}
答案 2 :(得分:1)
function words(str){
var words = [];
//check if words list is empty if so then insert the first word into the array
if(!words.length){
var word = str.split(" ")[0];
words.push({"word":word, "occurences":1});
}
//convert string to array so you can iterate through it
str = str.split(" ");
//iterate through the array starting from the first position because word at the position 0 is already in the array
for(var i = 1; i<str.length; i++){
//iterate through the words list to the see if the word has appeared yet
var wordExists = false;
for(var j = 0; j<words.length; j++){
if(str[i] == words[j].word){
//word exists in word so count one up
words[j].occurences += 1;
//used to prevent the word from being inserted twice
wordExists = true;
break;
}
}
//insert new word in words if it
if(!wordExists){
words.push({"word":str[i], "occurences":1});
}
}
return words;
}
答案 3 :(得分:0)
这是代码以及我通过@ori
传递的内容function words(str) {
var adjustedStr = str.replace(/\n|\t|\s\s+/g, ' ');
return adjustedStr.split(' ').reduce(function(count, word) {
count[word] = (count[word] || 0) + 1;
return count;
}, {});
}
console.log(words("reserved words like prototype and toString ok?"));
它安慰了
{toString: "function toString() { [native code] }1"}
答案 4 :(得分:0)
要在不使用hasOwnerProperty的情况下允许对象文字中的保留字,可以对Object使用null构造函数。
例如
function words(str) {
var adjustedStr = str.replace(/\n|\t|\s\s+/g, ' ');
return adjustedStr.split(' ').reduce(function(count, word) {
count[word] = (count[word] || 0) + 1;
return count;
}, Object.create(null));
}
console.log(words("reserved words like prototype and toString ok?"));
&#13;