この配列があるとします:
[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 ????
}
この配列があるとします:
[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 ????
}
// 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
あなたが探しているのはヒストグラムです:
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);
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]
並べ替える必要はありません。
var result = {};
for (var i = 0; i < arr.length; i++){
if (!result[arr[i]]) {
result[arr[i]]=0;
}
result[arr[i]]+=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])]++;
}