我有一个嵌套的对象数组,例如:
const data = {
"rates": {
"2019-09-04": {
"USD": 0.1275393858,
},
"2019-09-05": {
"USD": 0.1275638511,
}, "2019-09-06": {
...
}
我想要做的就是将数组弄平,然后将结果返回为:
"rates": {
1:{
"date": "2019-09-04"
"rate": "0.1275393858",
"currency":"USD"
},
} 2:{ ...
我尝试过Object.key
,但是我无法破坏“费率”。
这是我尝试过的。
const newData = {
rates: Object.keys(data.rates).map((date, idx) => {
return {
date,
rate: data.rates
}
})
};
我是否必须对数据进行“双重映射”才能得到我想要的?
答案 0 :(得分:1)
有很多方法(像往常一样),例如,使用map
,reduce
或简单的方法是遍历rates
条目并使用所需的结构重新创建另一个对象。
它应该看起来像这样:
const obj = {
"rates": {
"2019-09-04": {
"USD": 0.1275393858,
},
"2019-09-05": {
"USD": 0.1275638511,
}
}
}
const transformedObj = {rates: {}}
let i = 0
for (let [key, value] of Object.entries(obj.rates)) {
transformedObj.rates[i++] = {
date: key,
rate: Object.values(value)[0],
currency: Object.keys(value)[0]
}
}
console.log(transformedObj)
const obj = {
"rates": {
"2019-09-04": {
"USD": 0.1275393858,
},
"2019-09-05": {
"USD": 0.1275638511,
}
}
}
const transformedObj = {rates: {}}
for (let [key, value] of Object.entries(obj.rates)) {
transformedObj.rates[key] = {
date: key,
rate: Object.values(value)[0],
currency: Object.keys(value)[0]
}
}
console.log(transformedObj)
答案 1 :(得分:0)
“双重地图”可能还不够。尽管这个想法是正确的,但是您的问题在于两次“获取对象的属性”,同时还为其分配了正确的值。
使用两个地图的解决方案如下所示:
const dates = Object.keys(data.rates);
const results = dates.map((date) => {
const currencies = Object.keys(data.rates[date]);
return currencies.map(currency => {
return {
date: date,
rate: data.rates[date][currency],
currency: currency,
};
});
})
尽管这将是一个数组数组!如果您假设您的汇率采用两种货币,则这很有意义:
"2019-09-04": {
"USD": 0.1275393858,
"EUR": 1.47455,
},
仅此一项就产生一个包含两个元素的数组。彼此的比率可能会在其自己的数组中生成动态数量的对象。
您需要展平该数组数组。 las,Array.prototype.flat
和Array.prototype.flatMap
不受广泛支持。
因此,最好使用lodash之类的库。
因此,您可以通过以下方式得到想要的结果:
_.flatten(results), null, 4)
Lodash也支持flatMap,那么解决方案可以这样写:
import * as _ from "lodash";
const data = {
"rates": {
"2019-09-04": {
"USD": 0.1275393858,
"EUR": 1.47455,
},
"2019-09-05": {
"USD": 0.1275638511,
},
},
};
const dates = Object.keys(data.rates);
const results = _.flatMap(dates, (date) => {
const currencies = Object.keys(data.rates[date]);
return currencies.map(currency => {
return {
date: date,
rate: data.rates[date][currency],
currency: currency,
};
});
});
console.log(JSON.stringify(results, null, 4));
将打印:
[
{
"date": "2019-09-04",
"rate": 0.1275393858,
"currency": "USD"
},
{
"date": "2019-09-04",
"rate": 1.47455,
"currency": "EUR"
},
{
"date": "2019-09-05",
"rate": 0.1275638511,
"currency": "USD"
}
]