我调用一个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()
语句为我提供了四个未定义的值,即正确和期望的值。
答案 0 :(得分:2)
您需要先创建一个对象,然后才能为其分配值:
acc[currDate] = acc[currDate] || {};
acc[currDate].date = currDate;
acc[currDate].rates = acc[currDate].rates || {};
acc[currDate].rates[currCurrency] = currRate;
obj = obj || {}
模式只是“如果尚不存在则创建并分配新对象”的简写。