2016-12-07 5 views
1

私はTinderのようなアプリをAngularで作成しています。ユーザーが右にスワイプすると、そのオブジェクトに関する情報を取得しています。すべての画像は、6つのコレクションのうちの1つに含めることができます。JavaScript配列の値のインスタンス数を数え、勝者を宣言するには

ユーザーは右に4回しかスワイプできません。つまり、私には4つのシナリオがあります。私が探しているのは、右にスワイプされたすべてのコレクションのインスタンス数を数えることです。私はそれが理にかなったことを願う

だから例えば私はこのような配列で終わる場合:

[a, b, a, d] 

勝者は、私はそれらのすべてをカウントし、勝者として決定する方法はかなりわからないA.になります。

ご協力いただきありがとうございます。

function countNum(array, num){ 
    var count = 0; 
    for(var i = 0; i < array.length; ++i){ 
     if(array[i] == num) 
      count++; 
    } 
    return count 
} 

そして:

+0

現在持っているもののjsfiddleまたはcodepenを設定してください。 –

+0

そして少し言い直してみてください。あなたが達成しようとしていることは本当に不明です(少なくとも私には)。 –

+1

[javascript配列の等しい要素の数を見つける方法](http://stackoverflow.com/questions/32032001/how-to-find-the-number-of-equal-elements-in-javascript-アレイ) – nicovank

答えて

1

を、次の操作を実行できます。

var swipes = ["a", "b", "a", "d"]; 

// Calculate and store the frequency of each swipe 
var frequency = swipes.reduce(function(frequency, swipe){ 
    var sofar = frequency[swipe]; 
    if(!sofar){ 
    frequency[swipe] = 1; 
    } 
    else { 
    frequency[swipe] = frequency[swipe] + 1; 
    } 

    return frequency; 
}, {}); // {} - start out with an empty frequency object 

var max = Math.max.apply(null, Object.values(frequency)); // most frequent 

// find key for the most frequent value 
// Using underscore... 
// var winner = _.findKey(frequency, val => val === max); 

// Without underscore 
var winner = Object.keys(frequency).find(element => frequency[element] == max); 
+0

私はこのソリューションが好きですが、私はjqueryとAngularを使用しています。私は私のプロジェクトにアンダースコアを持っていません。私はアンダースコアなしでそれをすることができますか? – lz430

+0

アンダースコアをプロジェクトに持ち込むことを決めました。完璧に働いた!ありがとうございました – lz430

+1

アンダースコアに頼らずに自分の答えを更新しました。楽しい! :) – Kalman

0

はこのような何か試してみてくださいunderscoreからいくつかのマイナーな助けを借りてES6で

var a, b, c, d; 
//other stuff 

min = [0, 0] 
arr = [a, b, c, d] 
for (index in arr){ 
    c = countNum(array, arr[index]) 
    if (c > min[0]) { 
     min = [c, arr[index]] 
    } 
} 

jsfiddle here

1
const input = ['a', 'b', 'a', 'd']; 

const findMostFrequentItem = arr => { 
    let occurences = {}; 
    arr.forEach(x => occurences[x] = occurences[x] ? occurences[x] + 1 : 1); 
    return Object.keys(occurences).reduce((a, b) => occurences[a] > occurences[b] ? a : b); 
}; 

console.log(findMostFrequentItem(input)); 
関連する問題