Преобразовать строковое значение в ссылку на переменную в javascript - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть следующий код, где я пытаюсь сослаться на значения одного JSON объекта с переменными другого:

const ch = {
  "columns": {
    "COL1": {
      "position": 1,
      "composites": ["VAR1", "VAR3"]
    },
    "COL2": {
      "position": 3,
      "composites": ["VAR2"]
    },
    "COL3": {
      "position": 2,
      "composites": ["VAR4"]
    }
  }
}

const dataset = [{
    "VAR1": "alpha",
    "VAR2": 2,
    "VAR3": "1015",
    "VAR4": "z",
  },
  {
    "VAR1": "beta",
    "VAR2": 701,
    "VAR3": "1023",
    "VAR4": "z"
  }
]

for (let l = 0; l < dataset.length; l++) {
  for (const {
      position,
      composites
    } of Object.values(ch.columns).sort((a, b) => a.position - b.position)) {
    console.log(position, composites[0], dataset[l].VAR1)
    /* eval[dataset[l].composites[0]], this[dataset[l].composites[0]]*/
  }
}

Программа корректно упорядочивает столбцы, и я могу ссылаться на оба значения из 'ch', но я хотел бы использовать первое значение составных элементов в качестве ссылки на переменную для набора данных. Погуглив вопрос, я последовал паре рекомендаций, чтобы использовать «this» или «eval», но ни одна из них не сработала. Где я ошибаюсь?

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

1 VAR1 alpha alpha 
2 VAR4 alpha z
3 VAR2 alpha 2
1 VAR1 beta  beta
2 VAR4 beta  z
3 VAR2 beta  701

1 Ответ

2 голосов
/ 11 февраля 2020

Используйте dataset[l][composites[0]], чтобы получить дополнительный столбец. См. Динамический доступ к свойству объекта с использованием переменной

const ch = {
  "columns": {
    "COL1": {
      "position": 1,
      "composites": ["VAR1", "VAR3"]
    },
    "COL2": {
      "position": 3,
      "composites": ["VAR2"]
    },
    "COL3": {
      "position": 2,
      "composites": ["VAR4"]
    }
  }
}

const dataset = [{
    "VAR1": "alpha",
    "VAR2": 2,
    "VAR3": "1015",
    "VAR4": "z",
  },
  {
    "VAR1": "beta",
    "VAR2": 701,
    "VAR3": "1023",
    "VAR4": "z"
  }
]

for (let l = 0; l < dataset.length; l++) {
  for (const {
      position,
      composites
    } of Object.values(ch.columns).sort((a, b) => a.position - b.position)) {
    console.log(position, composites[0], dataset[l].VAR1, dataset[l][composites[0]])
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...