2016-05-06 8 views
6

Próbuję uzyskać najbardziej popularne/wspólne słowo z tablicy, próbowałem następujące, ale zamiast tego po prostu mówiąc "deszcz" wyświetla to wewnątrz konsoli [deszcz: 2, gorący: 1].Popularne słowo w tablicy

Co robię źle? Chcę wyświetlić tylko najbardziej popularne słowa bez numeru.

Każda pomoc/porada byłaby pomocna, dziękuję.

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

Odpowiedz

1

zgodnie z pierwotną funkcjonalnością. możesz go nieco poprawić, aby uzyskać najbardziej popularne słowo. Uwaga: nie uwzględnia to powiązań.

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

Wystarczy pętli tablicy licznika i odnaleźć słowo o największej liczbie:

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

Po biegnie ten, mostCommonWord będzie zawierać słowa z najwyższą liczbą. Jedynym zastrzeżeniem jest to, że jeśli na przykład występuje wiele słów z 3 wystąpieniami, to pierwsza z tablic count jest tą, która zostanie przypisana do mostCommonWord. Więc jeśli chcesz czegoś, co zwróci wiele słów, jeśli wszystkie mają taką samą liczbę, musisz to trochę zmodyfikować.

Zastrzeżenie: Prawdopodobnie istnieje lepszy sposób, aby to zrobić, ale jest to pierwsza rzecz, którą wymyśliłem.

0

można usunąć prawie wszystko po utworzeniu tablicy słów i zamiast dodać tę funkcję:

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

Następnie przekazać je swoją tablicę słów jak:

mostPopularWord(words) // Returns rain 

Oto jsFiddle

Nie napisałem tej funkcji, znalazłem ją, gdy szukałem sposobu, aby pomóc. Możesz przeczytać więcej o tym, co staraliśmy się zrobić tutaj: Get the element with the highest occurrence in an array

0

do liczenia i groupping można użyć reduce funkcję tak:

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

gorąco polecić JavaScript biblioteka narzędziowa, taka jak lodash, w takim przypadku możesz zrobić coś takiego:

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" 

Uwaga: Zobacz inne odpowiedzi dotyczące zwykłej funkcji JavaScriptu

Powiązane problemy