Как перебрать весь объект в разделе данных?

У меня есть данные, которые выглядят так:

data: 
  {
   main_level:
   {  
    user_input_1 : 
    {
     isFilled : false,
     val_1 : null,
     val_2 :null,
     val_3 : null,
    },
    user_input_2 : 
    {
     isFilled : false,
     val_1 : null,
     val_2 :null,
     val_3 : null,
    }
   }
}

Я хочу создать метод, который будет его повторять и печатать объекты user_input_1, user_input_2. Как это сделать? Я старался:

methods: {
  myclick: function () {
   for (el in Object.values(this.main_level))
   {
    console.log(el)
   }

  }
}
0
0
86
2

Ответы 2

Вам понадобится Object.keys:

for (el in Object.keys(this.main_level))

Если вам нужны и ключ, и значение, вы можете использовать Object.entries:

for (el in Object.entries(this.main_level))

var data =  {
   main_level:
   {  
    user_input_1 : 
    {
     isFilled : false,
     val_1 : null,
     val_2 :null,
     val_3 : null,
    },
    user_input_2 : 
    {
     isFilled : false,
     val_1 : null,
     val_2 :null,
     val_3 : null,
    }
   }
}

console.log(Object.keys(data.main_level))

Я получаю цифры на консоли вместо вложенных объектов

Dmitry Bubnenkov 10.08.2018 15:49

Вы используете однофайловый компонент? В этом случае ваш data должен быть функцией. Попробуйте data () { return { main_level: ... } }

Psidom 10.08.2018 15:53

Мои данные помещены в: var app = new Vue({ el: '#app', data: { Будет ли user_input_1 в вашем ответе объектом или просто текстом? Мне нужен объект

Dmitry Bubnenkov 10.08.2018 15:56

Тогда может быть ваш main_level - это массив вместо Object. Если это так, то вы можете попробовать for (el in this.main_level) { console.log(Object.keys(el)[0]) }.

Psidom 10.08.2018 15:59

Ваш код почти правильный, просто измените цикл for с в на из:

el in Object.values(this.main_level) в el of Object.values(this.main_level)

Вот рабочий пример:

methods: {
  myclick: function () {
    for (obj of Object.values(this.main_level)) {
      console.log(obj)
    }
  }
}

https://jsfiddle.net/j0pd1q2z/

Другие вопросы по теме