Как получить доступ к массиву, встроенному в объект * json. Свойство объекта при вызове не определено - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь сопоставить свойство "fiveDays", но когда я вызываю его, консоль возвращает

TypeError: data.fiveDays не определено

Стандартный способ вызов собственности, как правило, будет data.FiveDays из того, что я понимаю.

Пример объекта:

{
  "symbol": "ACB",
  "price": "0.7001",
  "date": "2020-03-12",
  "fiveDays": [
    [
      "2020-03-12",
      {
        "1. open": "0.6801",
        "2. high": "0.7400",
        "3. low": "0.6300",
        "4. close": "0.7001",
        "5. volume": "41546525"
      }
    ],
    [
      "2020-03-11",
      {
        "1. open": "0.9620",
        "2. high": "0.9820",
        "3. low": "0.8500",
        "4. close": "0.8587",
        "5. volume": "21826334"
      }
    ],
    [
      "2020-03-10",
      {
        "1. open": "1.0300",
        "2. high": "1.0700",
        "3. low": "0.9600",
        "4. close": "0.9802",
        "5. volume": "22182204"
      }
    ],
    [
      "2020-03-09",
      {
        "1. open": "0.9601",
        "2. high": "1.0900",
        "3. low": "0.9000",
        "4. close": "0.9490",
        "5. volume": "27748756"
      }
    ],
    [
      "2020-03-06",
      {
        "1. open": "1.2800",
        "2. high": "1.2900",
        "3. low": "1.1300",
        "4. close": "1.1700",
        "5. volume": "24907729"
      }
    ]
  ]
}

Метод, который я использую в main. js, принимает элемент HTML и объект, который создается с классом Акции. Здесь я пытаюсь вызвать data.fiveDays, чтобы он перебрал элементы массива и сопоставил их с новым объектом, который будет отображаться с помощью шаблона руля.

Метод:

const displayHistoricalData = (el, data) => {
        // modify data to contain an array of day objects
        let fiveDays = data.fiveDays.map(day => {
            let {'1. open': open, '2. high': high, '3. low': low, '4. close': close} = day[1];

            return {open, high, low, close, date: day[0]};
        });

        el.innerHTML = Handlebars.templates['stock-history']({history: fiveDays});
    };

Данные поступают из оператора document.queryselector, который прослушивает событие click.

 document
        .querySelector('.stock-display')
        .addEventListener('click', (evt) => {
            if (evt.target && evt.target.matches('button.btn-history')) {
                let symbolInput = document.querySelector('#symbol').value;
                displayHistoricalData(document.querySelector('.day-details'), new Stocks({symbol: symbolInput}));
                evt.preventDefault();
            }
        });

Как вы можете видеть здесь, "данные" в getHistoricalData происходят из класса Stocks.

Вопрос в том, как я могу получить доступ к массиву, который находится внутри объекта так что я могу это разрушить?

...