5

What is the easiest was to populate an array with a large number of objects created with a constructor?

I have a constructor function than makes TV and movie objects:

function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};

I am making many objects that I want to put into an array. This does not work:

var table = [
var avengers = new Media("avengers",'../assets/boxcovers/avengers.jpg');
var blade_runner = new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg');
var brave = new Media("brave",'../assets/boxcovers/brave.jpg');
var catching_fire = new Media("catching_fire",'../assets/boxcovers/catching_fire.jpg');
var django = new Media("django",'../assets/boxcovers/django.jpg');
var finding_nemo = new Media("finding_nemo",'../assets/boxcovers/finding_nemo.jpg');
];

I also tried putting table.push( at the beginning of each line. Do I really need to list each object again in the array like this or I can save the duplicate effort:

table = [avengers, blade_runner, etc.
1
  • You have to separate the variable declarations and array initialiser, you can't do both in one statement. Commented Jul 5, 2015 at 23:33

5 Answers 5

5

The syntax for this would be

var table = {
    mykey: myproperty,
    mykey2: myproperty2
};

If you want your variable to be an object, that is you can access properties by calling f.e table.avengers, your declaration should look like:

var table = {
    avengers: new Media("avengers",'../assets/boxcovers/avengers.jpg'),
    blade_runner: new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
    brave: new Media("brave",'../assets/boxcovers/brave.jpg')
    //... and so on and so forth
};

If you only want to be able to loop through them, you can create it as an array:

var table = [
    new Media("avengers",'../assets/boxcovers/avengers.jpg'),
    new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
    new Media("brave",'../assets/boxcovers/brave.jpg')
    //... and so on and so forth
];
Sign up to request clarification or add additional context in comments.

Comments

1

You are using wrong syntax. Try this instead:

function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};

var table = [
 new Media('avengers','../assets/boxcovers/avengers.jpg'),
 new Media('blade_runner','../assets/boxcovers/blade_runner.jpg')         
];

Comments

0

You can use a simple syntax also such as:

var mediatable = [];
var entry = {
    name: {},
    boxCover: {}
};
mediatable.push({
    name: "avengers",
    boxCover: '../assets/boxcovers/avengers.jpg'
});
mediatable.push({
    name: "blade_runner",
    boxCover: '../assets/boxcovers/blade_runner.jpg'
});
alert(mediatable.length);

or push it using the object:

entry.name = "brave";
entry.boxCover = '../assets/boxcovers/brave.jpg';
mediatable.push(entry);
alert(mediatable.length + ":" + mediatable[1].name);

Comments

0
function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};

function MediaTable(data) {
    var table = {};
    data.forEach(function(el){
        table[el[0]] = new Media(el[0], el[1])
    })

    return table;
};

var tableData = [
        ["avengers", '../assets/boxcovers/avengers.jpg'],
        ["blade_runner", '../assets/boxcovers/blade_runner.jpg'],
        ["brave" , '../assets/boxcovers/brave.jpg'],
        ["catching_fire", '../assets/boxcovers/catching_fire.jpg'],
        ["django", '../assets/boxcovers/django.jpg'],
        ["finding_nemo", '../assets/boxcovers/finding_nemo.jpg']
    ],
    table = new MediaTable(tableData);

Comments

-1

Rewrite your var table like this, that's all needed:

var table = [
  new Media("avengers",'../assets/boxcovers/avengers.jpg'),
  new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
  new Media("brave",'../assets/boxcovers/brave.jpg'),
  new Media("catching_fire",'../assets/boxcovers/catching_fire.jpg'),
  new Media("django",'../assets/boxcovers/django.jpg'),
  new Media("finding_nemo",'../assets/boxcovers/finding_nemo.jpg')
];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.