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

标签 javascript reduce

我调用 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() 语句给了我四个未定义的值,即正确值和预期值。

最佳答案

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

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

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

关于javascript - Reducer 函数无法在 reducer 对象中创建键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595544/

相关文章:

javascript - ES6 在覆盖 javascript 中的函数时访问子类的 `this`

Hadoop集群工作

Swift - 如何减少矩阵

javascript - 为什么 reduce 以这种方式工作?

hadoop - 当分区值大于reduce任务数时会发生什么?

javascript - 在当前 dom 之前添加 dom,并保持当前 dom 留在视口(viewport)中

javascript - 如何禁用表数据上的 "drag"

java - 如何直接映射/扩展对象到流?

javascript - 如何通过签名 URL 在 S3 对象上定义 Cache-Control header ?

php - JqG​​rid + 自动完成