我正在尝试从阵列中获得最受欢迎/常用的单词,我尝试了以下但是它只是说'Rain'而是在控制台中显示它[rain:2,hot:1]
我做错了什么?我只想显示没有数字的头号最流行的单词。
任何帮助/建议都会有所帮助,谢谢。
var defaultArray = [{age:"25-35",country:"united kingdom",sex:"male",word:"rain"},{age:"25-35",country:"united arab emirates",sex:"male",word:"hot"},{age:"25-35",country:"zimbabwe",sex:"female",word:"rain"}];
/* Popular */
function popular() {
var words = [];
for(var p = 0; p < defaultArray.length; p++){
var word = defaultArray[p].word;
words.push(word);
console.log(words);
}
var count = [];
for (var i = 0, j = words.length; i < j; i++) {
if (count[words[i]]) {
count[words[i]]++;
}
else {
count[words[i]] = 1;
}
}
console.log(count);
}
popular();
答案 0 :(得分:5)
您只需循环遍历计数数组并找到具有最高计数的单词:
var mostCommonWordCount = 0;
var mostCommonWord = "";
for (var key in count) {
if (count[key] > mostCommonWordCount) {
mostCommonWordCount = count[key]
mostCommonWord = key;
}
}
console.log(mostCommonWord);
运行后,mostCommonWord
将包含计数最高的单词。唯一需要注意的是,例如,如果有多个单词出现3次,则count
数组中的第一个单词将被分配给mostCommonWord
。因此,如果您想要的东西会返回多个单词,如果它们都具有相同的计数,那么您需要稍微修改一下。
免责声明:可能有更好的方法,但这是我想出的第一件事。
答案 1 :(得分:1)
与您拥有的原始功能保持一致。你可以稍微调整一下以获得最受欢迎的单词。注意:这不能说明关系。
var defaultArray = [
{age:"25-35",country:"united arab emirates",sex:"male",word:"hot"},
{age:"25-35",country:"united kingdom",sex:"male",word:"rain"},
{age:"25-35",country:"united arabemirates",sex:"male",word:"hot"}];
/* Popular */
function popular() {
var count = 0
var max=0;
var currentword="";
var words = [];
for(var p = 0; p < defaultArray.length; p++){
var word = defaultArray[p].word;
words.push(word);
}
for (var i = 0; i<words.length; i++) {
if (max<=count){
max=count;
}
count=0;
for (var x=0; x<words.length; x++)
{
if (words[i]==words[x] ){
count++;
}
if (count>max)currentword=words[i];
}
}
console.log(currentword);
}
答案 2 :(得分:0)
您可以在创建单词数组后删除几乎所有内容,而是添加此功能:
function mostPopularWord(arr){
return arr.sort(function(a,b){
return arr.filter(function(v){ return v===a }).length -
arr.filter(function(v){ return v===b }).length
}).pop();
}
然后传递你的数组,如:
mostPopularWord(words) // Returns rain
这是jsFiddle
我没有写这个功能,我在寻找帮助的方法时找到了它。您可以在此处详细了解您尝试执行的操作:Get the element with the highest occurrence in an array
答案 3 :(得分:0)
对于计数和灌浆,您可以使用reduce函数,如下所示:
var defaultArray = [{
age: "25-35",
country: "united kingdom",
sex: "male",
word: "rain"
}, {
age: "25-35",
country: "united arab emirates",
sex: "male",
word: "hot"
}, {
age: "25-35",
country: "zimbabwe",
sex: "female",
word: "rain"
}];
/* Popular */
function popular(arr) {
return arr.reduce(function(acc, cur) {
if (!acc[cur.word]) acc[cur.word] = 0;
acc[cur.word] += 1;
if (acc.MaxCount < acc[cur.word]) {
acc.MaxCount = acc[cur.word];
acc.PopularWord = cur.word;
}
return acc;
}, {
MaxCount: 0
}).PopularWord;
}
document.write('Max popular word: ',popular(defaultArray));
答案 4 :(得分:0)
我强烈推荐像lodash
这样的JavaScript实用程序库,在这种情况下你可以这样做:
var obj = _.countBy(_.map(defaultArray, 'word'));
console.log(obj); // Object {rain: 2, hot: 1}
var word = _.keys(obj).reduce(function (a,b) { return obj[a] > obj[b] ? a : b });
console.log(word); // "rain"
注意:请参阅纯JavaScript功能的其他答案