1

I define a JavaScript object literal with defaults so that my template can access them later:

self.emails = [{
    address: "",
    validation: {
        warning: false,
        message: "",
    }
}];

This works for self.emails[0] but I also need the properties to exist for self.emails[1] to self.emails[4]. Is there a better way to accomplish this than to type:

self.emails = [{
    address: "",
    validation: {
        warning: false,
        message: "",
    }
},
    address: "",
    validation: {
        warning: false,
        message: "",
    }
},
    address: "",
    validation: {
        warning: false,
        message: "",
    }
},
    address: "",
    validation: {
        warning: false,
        message: "",
    }
},
    address: "",
    validation: {
        warning: false,
        message: "",
    }
}];
Michał Perłakowski
  • 88,409
  • 26
  • 156
  • 177
user1283776
  • 19,640
  • 49
  • 136
  • 276
  • Possible duplicate of [Create an array with same element repeated multiple times in JavaScript](http://stackoverflow.com/questions/12503146/create-an-array-with-same-element-repeated-multiple-times-in-javascript) – Michał Perłakowski Aug 18 '16 at 12:39

2 Answers2

3

Use a simple for loop:

self.emails = []
for (let i = 0; i < 5; i++) {
  self.emails.push({
    address: "",
    validation: {
      warning: false,
      message: "",
    }
  })
}
Michał Perłakowski
  • 88,409
  • 26
  • 156
  • 177
0

I would do this job as follows;

var selfEmails = [{
    address: "",
    validation: {
        warning: false,
        message: "",
    }
}],
longSelfEmails = Array(...Array(5)).map(o => { o = Object.assign({},(selfEmails[0]));
                                               o.validation = Object.assign({},o.validation);
                                               return o;
                                             }),
      modified = longSelfEmails.map((o,i) => {o.validation.message = i;
                                              o.address = "addr_0"+i;
                                              return o;
                                             });
console.log(modified);

Now they are all an individual object.

Redu
  • 25,060
  • 6
  • 56
  • 76