Цикл по объекту для извлечения данных из другого вложенного объекта - PullRequest
0 голосов
/ 11 декабря 2018

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

const VMs = {
  'VM01': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM02': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM03': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  }
};

const thisVM = 'VM03'; // Hardcoded here but actually this.$route.params.data (data not defined in this example)

for (let obj in VMs) {
  console.log(obj) // this is only a string of the key eg "VM01". I 
  // want obj to be an object where I can reference its data.

  if (obj = thisVM) {

    // get data from this VM

  }
}

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Используйте VMs[obj] для получения объекта.

Ваш оператор if содержит опечатку, = должно быть == для сравнения.

Но в этом нет особой необходимостидля цикла в первую очередь.Вы можете просто использовать VMs[thisVM], чтобы получить нужный объект.См. Динамический доступ к свойству объекта с использованием переменной

.

const VMs = {
  'VM01': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM02': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM03': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  }
};

const thisVM = 'VM03'; // Hardcoded here but actually this.$route.params.data (data not defined in this example)

for (let obj in VMs) {
  console.log(VMs[obj]) // this is only a string of the key eg "VM01". I 
  // want obj to be an object where I can reference its data.

  if (obj == thisVM) {

    // get data from this VM

  }
}
0 голосов
/ 11 декабря 2018

Я не совсем уверен, каковы ваши намерения, но если вы хотите получить доступ к вложенным реквизитам, вы можете использовать метод Object.entries, например:

const VMs = {
  'VM01': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM02': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  },
  'VM03': {
    "1": "value1",
    "2": "value2",
    "3": "value3"
  }
};

const thisVM = 'VM03';

Object.entries(VMs).forEach(([prop, val]) => {
  console.log(val) 
  if (prop === thisVM) {
    // Your action
  }
})

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...