Groyreg
@Groyreg
Front-end

Как достать значения из многоуровневого объекта?

Есть таблица, которая рисуется на основе данных из базы. Одна из колонок это ссылки. Когда кликаешь на любую из них открывается модальное окно и объекту currentGen присваивается объект gen с информацией вида:

currentGen : [{
      id: 10,
      name: 'IL15RA',
      fullname: null,
      description_eng: null,
      description_ru: null,
      snps: [
        {
          id: 19,
          gene_id: 10,
          rs: null,
          name: null,
          name2: null,
          description_ru: null,
          genotypes: [
            {
              id: 30,
              snp_id: 19,
              value: 'CC',
              frequency: 21.6,
              description_ru: null
            },
            {
              id: 28,
              snp_id: 19,
              value: 'AA',
              frequency: 21.7,
              description_ru: null
            },
            {
              id: 29,
              snp_id: 19,
              value: 'AC',
              frequency: 56.7,
              description_ru: null
            }
          ]
        }
      ]
    }]

Также есть график вида диаграмма, который отрисовывается на основе данных currentGen.snps.genotypes.value - это подписи к диаграмме, и currentGen.snps.genotypes.frequency - это процентное соотношение.

Вот эти два параметра мне необходимо передать в объект chartgendata вида:

chartgendata: {
      			labels: [],
      			datasets: [
      				{
      				label: 'default',
      				backgroundColor:  [
	      				'#177ef8',
	      				'#07f816',
	      				'#f80b1f'
      				],
      				data: []
      				}
      			]
      		}

На клик по ссылке я передаю текущий объект в currentGen и туда же хочу добавить передачу данных для графика, но получаю ошибку: this.currentGen.snps.genotypes is undefined. При этом, если я передам, например одноуровневое значение this.currentGen.name то он его передает нормально без ошибок.

Вот так выглядит моя попытка передать данные, помогите поправить код:

chosenGen(gene){
    var i = 0;

    this.currentGen = gene;

    this.chartgendata.labels.push(this.currentGen.snps.genotypes[i].value);
    this.chartgendata.datasets[0].data.push(this.currentGen.snps.genotypes[i].frequency);

    i++;
}
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
получаю ошибку: this.currentGen.snps.genotypes is undefined

Э-э-э, но ведь snps - массив. Наверное, надо так - this.currentGen.snps[0].genotypes. Или forEach'ем по нему пробежаться, если элементов может быть несколько.

UPD. А вообще, по-хорошему, выбора гена должен сводиться к простому присваиванию, объект с данными для графика следует сделать вычисляемым свойством. Примерно так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы