我想要实现一个JavaScript程序,通过单词计算并返回该单词以及出现的次数,例如{hello:2,“@hello”:1,world :1,的toString:1}在javascript中计算单词并将其推入对象
以下是我的代码,但我只得到单词总数
function words(str) {
app = {};
return str.split(" ").length;
}
console.log(words("hello world"));
我想要实现一个JavaScript程序,通过单词计算并返回该单词以及出现的次数,例如{hello:2,“@hello”:1,world :1,的toString:1}在javascript中计算单词并将其推入对象
以下是我的代码,但我只得到单词总数
function words(str) {
app = {};
return str.split(" ").length;
}
console.log(words("hello world"));
使用减少重复的话阵列,并计算实例:
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"));
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;
}
这是代码,我通过@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"}
检查hasOwnProperty,就像接受的答案一样。但我也做了一个你是用空构造函数创建更简单的对象字面值。 – Keith
允许在对象文本保留字不使用hasOwnerProperty,你可以使用Object的空构造函数。
例如。
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?"));
一种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}
的[JavaScript的组按阵列]可能的复制(HTTP:/ /stackoverflow.com/questions/12873228/javascript-group-by-array) – Andreas