1

この配列があるとします:

[1, 2, 2, 3, 3, 3, 4]

値が次のように表示される回数を含む配列/オブジェクトを返すにはどうすればよいですか:

{1:1, 2:2:, 3:3, 4:1}

これが私がこれまでに持っているものです:

// sort first
arr.sort();

for (var i = 0, l = arr.length, i < l, i++) {
    // what should go here ???? 
}
4

5 に答える 5

3
// Our results will be loaded into cont
var cont = {};

// For each number in our value array
for ( var i = 0; i < vals.length; i++ ) {
   // If it's found in the result array
   cont[ vals[i] ]
     // Increment it
     ? cont[ vals[i] ]++
     // Else, set it to 1
     : cont[ vals[i] ] = 1 ;
}

while ループと変数の割り当てを使用して、さらに簡単にすることができます。

var vals = [1, 2, 2, 3, 3, 3, 4], // Values to cycle through
    cont = {},                    // Object to store results in
    indx = i = -1;                // Index and Counting variables

while ( indx = vals[ ++i ] )      // While a value exists for location i
  cont[ indx ]                    // Check to see if it's in the result object
    ? cont[ indx ]++              // If it is, increment it
    : cont[ indx ] = 1 ;          // If it is not, set it to 1
于 2012-05-16T15:49:50.243 に答える
2

あなたが探しているのはヒストグラムです:

http://jsfiddle.net/jbabey/jdMgp/

var array = [1, 2, 2, 3, 3, 3, 4];
var results = {};

for (var i = 0; i < array.length; i++) {
    if (results.hasOwnProperty(array[i])) {
        results[array[i]]++;
    } else {
        results[array[i]] = 1;
    }
}

console.log(results);​
于 2012-05-16T15:48:01.597 に答える
1

ArrayforEeach メソッドを使用できます。

var freq = {}, arr = [1, 2, 2, 3, 3, 3, 4];
arr.forEach(function(x){
   freq[x] = freq[x] ? freq[x]+1 : 1;
});
//=> freq[1] = 1, freq[2] = 2, freq[3] = 3 and freq[4] = 1
//=> arr is still [1, 2, 2, 3, 3, 3, 4]
于 2012-05-16T15:53:22.923 に答える
1

並べ替える必要はありません。

var result = {};
for (var i = 0; i < arr.length; i++){
    if (!result[arr[i]]) {
        result[arr[i]]=0;
    }
     result[arr[i]]+=1;
}
于 2012-05-16T15:47:13.510 に答える
1

どうぞ!

var arr = [1, 2, 2, 3, 3, 3, 4]; // Sample data
var countings = {}; // Result object
for (var i = 0; i < arr.length; i++) {
    if(countings[(arr[i])] == undefined) countings[(arr[i])] = 0;
    countings[(arr[i])]++;
}

ここにフィドルが入ります。

于 2012-05-16T15:50:43.987 に答える