2017-05-16 5 views
0
var status = ['Inprocess', 'Hired', 'Rejected', 'Inprocess']; 
var count = []; 
for (var i = 0; i < status.length ; i++) { 
    if(count[status[i]]){ 
    count[status[i]]++; 
    } else { 
    count[status[i]] = 1; 
    } 
} 

配列ステータスがあり、ステータス値の発生をカウントしてカウント配列に結果を取得しようとしています。jqueryを使用した配列のカウント数

私はその結果を取得しています:私は結果になりたいのに対し

count = ["Inprocess" : 2, "Hired" : 1, "Rejected" : 1] 

count = [2,1,1] 

助けてください。

+0

なぜ最初のデータ構造は十分ではありませんか? 2番目の単語は、単語の順番がわからない限り、一見無意味です。また、あなたの例は正しいですか?それは元の配列の順序に依存しているように(= 3拒否?)私は同意 – Chris

+0

を、第二のデータ構造は、意味をなさない。 –

+0

*「jqueryのを使用して」* - あなたは現在のjQueryを使用していない、またあなたはそれが必要なのです。 (あなたがオブジェクトではなく、配列を使用する必要がありますが)あなたの現在の出力は、少なくとも中間の作業工程として必要とされるが、すでに指摘されているように、ご希望の出力は、実際に自分自身で使うには少し難しいです。とにかく、あなたはプレーンな配列を取得するために、既存の値をマッピングすることができます: '回数= Object.keys(カウント).MAPを(V =>カウント[V])'。 – nnnnnn

答えて

0

window.statuswindowのプロパティであり、2つはの表記をObjectという表記法と混同しているようです。私はまた、あなたがなぜ拒絶されているのかわからない:3 'そのようなアイテムがアレイにあるとき。

'status'変数にローカルスコープがあるように(または、関数の引数として渡すように)、関数内にコードをラップし、ハッシュテーブルを使用して各配列要素の数を数え、最後にそのオブジェクトを実行して、カウント結果を配列として返します。何かのように...

function statusCount(status) { 
    var count = {}; 

    status.forEach(function(s) { 
     count[s] = count[s] ? ++count[s] : 1; 
    }); 
    //count = {Inprocess: 2, Hired: 1, Rejected: 1} 

    return Object.keys(count).map(function(c) { 
     return count[c]; 
    }); 
} 

var sCount = statusCount(['Inprocess', 'Hired', 'Rejected', 'Inprocess']); 
console.log(sCount); 
//=> Array [ 2, 1, 1 ] 

'status'配列を引数として関数に渡すと、その関数をいつでも再利用できます。

出力はかなりランダムなようだと、それ自体に価値が実際に関係するものにはほとんど手がかりを与える - しかし、うまくいけば例はあなたの配列の要素のカウントインスタンスへのアプローチについていくつかのアイデアを与えるだろう。

+0

なぜ 'Object.keys(count).map(c => count [c])'なのでしょうか? – nnnnnn

+0

あなたはES6記法を使っていることをOPに書き留めておきたいと思いますが、彼がプリプロセッサを使用していないとうまくいかないでしょうか? –

+1

@RickCalder ES6は最新のFirefoxで動作しますが、あなたは正しいと思います。少し記入します。 –

関連する問題