0

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.

josh
  • 5
  • 1

4 Answers4

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
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