Добавление динамического именованного объекта Javascript в массив с помощью цикла for

#javascript

#javascript

Вопрос:

Интересно, можно ли использовать цикл для добавления динамически именованных объектов в массив, поэтому мне не нужно повторять «нажатие» на массив. Ткс !!

   let _objA0 = { "name":"regionId", "value":"myRegion" };
  let _objA1 = { "name":"vdcId", "value":"myId" };
  let _objA2 ... _objA100
  
  let test = []
  test.push(_objA0)
  test.push(_objA1)
  ...
  test.push(_objA100)
 

Комментарии:

1. у вас есть 100 переменных объектов?

2. Если речь идет о том, чтобы не повторять push , вы можете просто let test = [_objA0, _objA1, ..., _objA100]; задать реальный вопрос, хотя, почему вам нужно иметь эти динамически именованные объекты для начала.

3. Пожалуйста, покажите нам, как создаются эти объекты.

4. Tks, у нас есть поток создания «на основе шаблона JSON», где JSON содержит десятки атрибутов продукта. Один из атрибутов содержит массив объектов с десятками конфигураций. Мне нужно заполнить массив моими «подготовленными объектами», и я хочу найти что-то приличное.

5. Я должен признать, что это неубедительный специальный дизайн в моей команде, и мне мало что нужно сделать, чтобы изменить дизайн с нуля…

Ответ №1:

Я думаю, сейчас самое время использовать eval

 let test = [];
for(let i = 0; i <= 100; i  ) {
  test.push(eval(`_objA${i}`));
}
 

Комментарии:

1. Это когда-нибудь подходящее время для использования eval ? Я имею в виду, это все забавы и игры, пока кто-то не вставит эксплойт XSS в один из ваших объектов… (Кстати, не мой downvote)

2. @RobbyCornelissen Единственная динамическая переменная в этом eval — i из цикла, и она получает значение переменной, ничего не нужно вводить, что в данном случае относительно безопасно. Хотя использовать его не рекомендуется.

3. это тоже весело и забавно, пока кто-то не решил, что запишет все переменные одну за другой, и решит преобразовать их в массив. лол, я думаю, сейчас не самое плохое время для использования eval. Я дам вам ап.

Ответ №2:

Вы можете получить доступ к переменным (с помощью ключевого слова var) с помощью объекта window , попробуйте это:

 var _objA0 = { "name":"regionId", "value":"myRegion" };
var _objA1 = { "name":"vdcId", "value":"myId" };

let test = [];

for(let i = 0; i < 2; i  ){
    test.push(window['_objA'   i]);
}

console.log(test) 

Комментарии:

1. Что ж, если он может изменить значение let to var на этапе генерации, я бы предложил просто сгенерировать массив в первую очередь…

2. Это также предполагает, что код выполняется в контексте браузера, что не обязательно является заданным.