Сбой функции редуктора для создания пары ключ-значение в объекте редуктора - PullRequest
1 голос
/ 14 июня 2019

Я вызываю канал RSS и разбираю его с помощью парсера.Я получаю массив.Теперь я хочу в конце создать объект, который будет выглядеть следующим образом:

{
  "2019-06-13": {
    "rates": {
      "usd": "1.1289",
      "jpy": "122.44",
      "gbp": "0.88948",
      "chf": "1.1207"
    },
    "date": "2019-06-13"
  }
}

Функция .reduce в данный момент выглядит следующим образом.Я получаю сообщение об ошибке при попытке установить дату:

rateJson = rateArray.reduce((acc, curr) => {
                    let currObj =
                        curr['cb:statistics'][0]['cb:exchangeRate'][0];
                    let currCurrency = currObj['cb:targetCurrency'][0].toLowerCase();
                    let currDate =
                        currObj['cb:observationPeriod'][0]['cb:period'][0];
                    let currRate = {
                        rate: currObj['cb:observation'][0]['cb:value'][0],
                        mult: currObj['cb:observation'][0]['cb:unit_mult'][0]
                    };

                    console.log(currDate,currCurrency,currRate, acc)


                    acc[currDate]['date'] = currDate;
                    acc[currDate]['rates'][currCurrency] = currRate;
                    return acc;
                }, {});

Сообщение об ошибке: TypeError: Cannot set property 'date' of undefined

Оператор console.log() дает мне четыре значения, которые не являются неопределенными, т.е.правильные и ожидаемые значения.

1 Ответ

2 голосов
/ 14 июня 2019

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

acc[currDate] = acc[currDate] || {};
acc[currDate].date = currDate;
acc[currDate].rates = acc[currDate].rates || {};
acc[currDate].rates[currCurrency] = currRate;

Шаблон obj = obj || {} - это просто сокращение для "создать и назначить новый объект, если он еще не существует».

...