Javascript映射嵌套数组
我有一个嵌套的对象数组,如:Javascript映射嵌套数组,javascript,react-native,Javascript,React Native,我有一个嵌套的对象数组,如: const data = { "rates": { "2019-09-04": { "USD": 0.1275393858, }, "2019-09-05": { "USD": 0.1275638511, }, "2019-09-06": { ... } 我只想将数组设置为平面,并将结果返回为: "rates": { 1:{ "date": "2019-09-04" "rat
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,但我无法破坏“rates”
这就是我尝试过的
const newData = {
rates: Object.keys(data.rates).map((date, idx) => {
return {
date,
rate: data.rates
}
})
};
我必须“双重映射”数据才能得到我想要的吗?有很多方法(像往常一样)比如使用map
,reduce
,或者简单的方法是循环rates
条目并用你想要的结构重新创建另一个对象
它应该是这样的:
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,
};
});
})
const obj={
“费率”:{
"2019-09-04": {
“美元”:0.1275393858,
},
"2019-09-05": {
“美元”:0.1275638511,
}
}
}
const transformedObj={rates:{}
设i=0
for(让对象项的[键,值](对象比率)){
transformedObj.rates[i++]={
日期:,
速率:对象值(值)[0],
货币:对象。键(值)[0]
}
}
console.log(transformedObj)
双映射可能不够。虽然这个想法是正确的,但您的问题包括两次“获取对象的属性”,同时也为其指定正确的值
使用两个贴图的解决方案可能如下所示:
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,
},
仅此一步就可以生成一个包含两个元素的数组。相互速率可以在它们自己的数组中生成动态数量的对象
您需要展平该阵列。唉,这并没有得到广泛的支持
所以你最好使用像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"
}
]
仅供参考,您的任何示例中都没有数组。也许你指的是嵌套对象?结果如何比输入“更平坦”?你只是用一个数字来代替日期。这不会改变对象的深度抱歉,我对编码还不熟悉。如果我想做像“rates”:{“2019-09-04”:{“date”:“2019-09-04”,“rate”:0.1275393858,“currency”:“USD”},我会搞乱嵌套对象和嵌套数组hello,没有增量数字,我该怎么做?这对有多种货币的利率有效吗?@k0pernikus我不想为某些假设编写代码。所以答案是否定的@Rachells我已经为你的第二个请求更新了…请检查这是否是你想要的。这是一个很好的例子谢谢你,我从你的代码和经验中学到了很多赖恩!