2016-05-06 22 views
6

Bir diziden en popüler/yaygın sözcüğü almaya çalışıyorum, aşağıdakileri denedim ama bunun yerine sadece 'Yağmur' yerine bunu konsolun içinde görüntülediğini söylüyorum [yağmur: 2, Sıcak: 1].Popüler kelime Array

Neyi yanlış yapıyorum? Sadece numara olmayan en popüler kelimeyi görmek istiyorum.

Herhangi bir yardım/tavsiye yararlı olur, teşekkür ederim. mostCommonWord en yüksek sayısı ile kelime içerecek

var mostCommonWordCount = 0; 
var mostCommonWord = ""; 
for (var key in count) { 
    if (count[key] > mostCommonWordCount) { 
     mostCommonWordCount = count[key] 
     mostCommonWord = key; 
    } 
} 
console.log(mostCommonWord); 

bu çalıştırır sonra:

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(); 

cevap

1

diğer cevaplar bakın. En popüler kelimeyi almak için biraz değiştirebilirsin. Not: Bu, bağları hesaba katmaz.

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); 
} 
5

Sadece sayım diziye döngü gerekir ve en yüksek sayısı ile kelime bulmak. Tek uyarı, örneğin, 3 oluşumlu birden fazla kelime varsa, count dizisindeki ilk olan, mostCommonWord'a atanacak olan dizidir. Yani eğer hepsi aynı sayıma sahipse birden fazla kelime döndürecek bir şey istiyorsanız, bunu biraz değiştirmelisiniz.

Yasal Uyarı: Bunu yapmanın daha iyi bir yolu olabilir, ancak bu, ilk geldiğim şey.

Sen kelimelerin bir dizi oluşturduktan sonra hemen her şeyi kaldırmak ve bunun yerine bu işlevi ekleyebilirsiniz
0

:

İşte
mostPopularWord(words) // Returns rain 

bir jsFiddle

geçerli:

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(); 
} 

Sonra gibi o kelimelerin dizinizi geçecek

Bu işlevi yazmadım, yardım için bir yol ararken buldum. Böyle sayım için Get the element with the highest occurrence in an array

0

ve reduce işlevini kullanabilirsiniz gruplandırma:

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));

0

derece tavsiye ederim bir JavaScript Sen burada yapmaya çalıştığımız ne hakkında daha fazla bilgi bulabilirsiniz lodash gibi yardımcı program kitaplığı, bu durumda aşağıdaki gibi bir şey yapabilirsiniz:

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" 

Not: vardı orijinal işlevi doğrultusunda düz JavaScript işlevselliğine