Попытка добавить несколько свойств в объект Javascript с помощью цикла

Я надеюсь, что день находит вас хорошо.

Итак, у меня есть объект без свойств. Я пытаюсь добавить несколько свойств к этому объекту, используя цикл. Каждое свойство, добавленное в цикл, будет отображаться в объекте несколько раз в зависимости от того, сколько раз цикл выполняется, при этом каждое новое свойство увеличивается на 1.

Итак, у меня есть что-то вроде этого:

myObject = {  };

for(i = 0; i < 2; i++){
    myObject.propA + i = foo;
    myObject.propB + i = bar;
};

который я хочу дать что-то вроде этого:

myObject.propA0 = foo;
myObject.propB0 = bar;
myObject.propA1 = foo;
myObject.propB2 = bar;

давать славный стог объекты, созданные на лету, в зависимости от того, сколько раз выполняется цикл. Но я, кажется,не понимаю. Итак, как именно я могу передать переменную из цикла в свойство при ее создании и назначении?

4 ответов


попробуйте использовать квадратную скобку для обозначения имен

   myObject['propa' + i] = foo;

как говорили другие пользователи, Вы должны использовать скобки, чтобы ссылаться на свойства по их строкам имен:

myObject['propA' + i] = 'foo';

но почему вы не используете массив объектов вместо одного объекта с похожими, пронумерованными именами свойств? Что-то вроде этого:--4-->

var myArray = [];
for(i = 0; i < 2; i++){
    myArray.push({
        propA: 'foo',
        propB: 'bar'
    });
};

Это следует производить:

[
    { propA: 'foo', propB: 'bar'},
    { propA: 'foo', propB: 'bar'}
]

это выглядит чище, на мой взгляд.


используйте метод array-access для установки свойств.

myObject = {  };

for(i = 0; i < 2; i++){
    myObject['propA' + i] = foo;
    myObject['propB' + i] = bar;
};

можно использовать

object['popA'+i]=... 

чтобы создать стандартное свойство или использовать свойство getter / setter, в этом случае вам нужно использовать

Object.defineProperty(object, *propertyname*, *propertyDescriptor*).  

Последнее дает вам больше возможностей для созданного свойства.

все подробности здесь :
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty