Reducer函数无法在Reducer对象中创建键值对

时间:2019-06-14 09:43:41

标签: javascript reduce

我调用一个RSS feed并使用解析器对其进行解析。我收到一个数组。我现在想最后创建一个对象,如下所示:

{
  "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 个答案:

答案 0 :(得分:2)

您需要先创建一个对象,然后才能为其分配值:

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

obj = obj || {}模式只是“如果尚不存在则创建并分配新对象”的简写。