I would like to know how many element of each number is in array, i. e.:
[2,2,3,6,1,1001,2]
should return 2 => 3, 3 => 1, 6 = >1, 1 => 1, 1001 => 1. But when I use additional array when I set counted[2] = 3
, and counted[1001] = 1
I create 1002 length array (in opposite to arrays in PHP
I think...). How could I improve it? (of course I don't know how many element there will be in my input array)
Thanks in advice.
Asked
Active
Viewed 522 times
0

josh
- 5
- 1
4 Answers
2
Use a Javascript object as a hashtable, so the numbers are represented as properties on that object:
var array = [2,2,3,6,1,1001,2];
var numbers = {};
for (var i = 0; i < array.length; i++) {
var number = array[i];
if (typeof(numbers[number]) === "undefined") {
numbers[number] = 1;
} else {
numbers[number]++;
}
}

roryf
- 29,592
- 16
- 81
- 103
-
Nice, I was praying for that simple solution! – josh Mar 05 '11 at 17:45
1
You could use objects.
Here is an example:
var src = [2,2,3,6,1,1001,2]
var results = {}
for (var i = 0, n = src.length; i < n; i++)
{
results[src[i]] = results[src[i]] || 0
results[src[i]] += 1
}
// Iterate over results or access by index to see frequency
for (var idx in results)
{
console.log(idx + " ==> " + results[idx])
}

Aishwar
- 9,284
- 10
- 59
- 80
0
Try using Object instead of Array.
Array assumes that if you insert an element at index x, then it implies that you want an array of at least x length.

Frederik
- 594
- 3
- 9
- 24
0
This is a very naive answer, but you could try using a hashmap instead.
var counted = { };

nicobn
- 44
- 2
-
Example: var counted = { "2": 3, "1001": 1 }; console.log(counted["2"]); counted["3"] = 4; – Bart Mar 05 '11 at 17:32