我需要解析API到我的应用程序中,以获取以下对象数组:
parsedPlan = [{
id: "start"
small_degressive_rate: 0.22
small_hourly_rate: 2
large_degressive_rate: 0.27
large_hourly_rate: 4.2
},
{
id: "bonus"
small_degressive_rate: 0.21
small_hourly_rate: 1.75
large_degressive_rate: 0.26
large_hourly_rate: 3.55
},
...
]
我尝试过滤api数据以获取所需的值,然后将其推送到新数组:parsedPlan
。
import axios from 'axios';
export function parsedPlan() {
const api = '##########';
const element = {};
const parsedPlan = [];
element.id = '';
element.small_hourly_rate = '';
element.small_degressive_rate = '';
element.large_hourly_rate = '';
element.large_degressive_rate = '';
axios.get(`${api}/car_prices`)
.then((response) => {
const smallPlan = response.data.filter(plan => plan.size == 'S');
smallPlan.map((plans) => {
parsedPlan.push({
id: plans.plan,
small_hourly_rate: plans.hourly_rate,
small_degressive_rate: plans.distance_degressive_rate,
});
});
const largePlan = response.data.filter(plan => plan.size == 'XL');
largePlan.map((plans) => {
parsedPlan.push({
id: plans.plan,
large_hourly_rate: plans.hourly_rate,
large_degressive_rate: plans.distance_degressive_rate,
});
});
})
.catch((error) => {
console.log(error);
});
return parsedPlan;
}
现在我的parsedPlan
看起来像这样:
parsedPlan = [{
id: "start"
small_degressive_rate: 0.22
small_hourly_rate: 2
},
{
id: "bonus"
small_degressive_rate: 0.21
small_hourly_rate: 1.75
},
...
{
id: "start"
large_degressive_rate: 0.27
large_hourly_rate: 4.2
},
{
id: "bonus"
large_degressive_rate: 0.26
large_hourly_rate: 3.55
},
...
]
我想合并具有相同id
的对象。
有什么想法可以得到预期的结果吗?
答案 0 :(得分:1)
您可以使用reduce函数,并在累加器数组中检查是否存在ID匹配的对象。
如果匹配,则在该索引中添加一个包含所有键的新对象
let data = [{
id: "start",
small_degressive_rate: 0.22,
small_hourly_rate: 2
},
{
id: "bonus",
small_degressive_rate: 0.21,
small_hourly_rate: 1.75
}, {
id: "start",
large_degressive_rate: 0.27,
large_hourly_rate: 4.2
},
{
id: "bonus",
large_degressive_rate: 0.26,
large_hourly_rate: 3.55
}
]
let newData = data.reduce(function(acc, curr) {
let findIndex = acc.findIndex(function(item) {
return item.id === curr.id
})
if (findIndex === -1) {
acc.push(curr)
} else {
acc[findIndex] = (Object.assign({}, acc[findIndex], curr))
}
return acc;
}, [])
console.log(newData)
答案 1 :(得分:1)
“使用reduce
函数。创建一个以id
作为键的对象。检查id是否存在,如果不存在,则创建名称为id
的键,否则将其余值分布在现有对象,然后使用Object.Values()排除键”
const input = [
{
id: "start",
small_degressive_rate: 0.22,
small_hourly_rate: 2
},
{
id: "bonus",
small_degressive_rate: 0.21,
small_hourly_rate: 1.75
},
{
id: "start",
large_degressive_rate: 0.27,
large_hourly_rate: 4.2
},
{
id: "bonus",
large_degressive_rate: 0.26,
large_hourly_rate: 3.55
},
];
const output = Object.values(input.reduce((accu, {id, ...rest}) => {
if(!accu[id]) accu[id] = {};
accu[id] = {id, ...accu[id], ...rest};
return accu;
}, {}));
console.log(output);