Laurent
Laurent

Reputation: 1563

Javascript multi-dimension array initialization

I'm looking for the best way to initialize multi-dimensional arrays in Javascript. I'm much more familiar with PHP where I'm not obliged to declare arrays or dimensions before feeding it with values.

Basically what I tried to do is create an array with the following format

catalogue[i]["name"]="a name";
catalogue[i]["description"]="a description";

...etc...

If I do the following:

var catalogue = new Array();
for (i=0; i<otherarray.length;i++)
    {
       catalogue[i]['name']=otherarray[i];
    }

Catalogue is undefined, I also tried with catalogue[i].name but same issue. If I only assign a simple value like catalogue[i]=2, it works but that's not what I'm looking for. I couldn't find a working example of what I'm looking for.

Do I need to initialize every possible dimension of an array before being able to feed it with new values?

Thanks Laurent

Upvotes: 0

Views: 89

Answers (3)

Mouradif
Mouradif

Reputation: 2694

If you want string keys in your array in Javascript you have to declare an Object. The catalogue variable itself is an array but each element inside that array is an object with the two keys "name" and "description". For example this code works :

var c = [1,2,3,4,5];
var n = ['one', 'two', 'three', 'four', 'five'];
var cat = [];
for (i = 0; i < c.length; i++)
{
  cat[i] = {
    name : n[i],
    value: c[i]
  };
}

now if you console.dir(cat); it outputs this result :

Array[5]
    -> 0 : Object
        name: "one"
        value: 1
    -> 1 : Object
        name: "two"
        value: 2
    ...

Upvotes: 1

Aᴍɪʀ
Aᴍɪʀ

Reputation: 7803

Put this in your loop to create the object you want to store the values in:

catalogue[i] = {}; OR catalogue.push({});

Your code would be like this then:

var catalogue = new Array();
for (i=0; i<otherarray.length;i++)
{
   catalogue[i] = {}; // initialization
   catalogue[i]['name']=otherarray[i];
}

Note that you can initialize and assign a value in the same line:

var catalogue = new Array();
for (i=0; i<otherarray.length;i++)
{
    catalogue[i] = {
        name: otherarray[i],
        otherKey: 'otherValue' // list all of your keys and values
    };
}

Upvotes: 1

void
void

Reputation: 36703

var catalogue = new Array();
for (i = 0; i < otherarray.length; i++) {
  catalogue[i] = {};
  catalogue[i]['name'] = otherarray[i];
}

Or

var catalogue = new Array();
for (i = 0; i < otherarray.length; i++) {
  catalogue.push({"name":otherarray[i]});
}

Upvotes: 2

Related Questions