gpt4 book ai didi

javascript - 如何将对象转换为按对象键分组

转载 作者:行者123 更新时间:2023-11-28 03:21:29 25 4
gpt4 key购买 nike

我有这个对象,它还包含数组和对象,并且当前按“类别”分组

data = {
vehicles: [
{
name: "Team1",
cars: [
{
multiple: 0.5,
category: "cars"
},
{
multiple: 0.5,
category: "cars"
}
],
bike: [
{
multiple: 0.5,
category: "bike"
}
],
scooter: [
{
multiple: 0.5,
category: "scooter"
}
]
},
{
name: "Team2",
cars: [
{
multiple: 0.5,
category: "cars"
},
{
multiple: 0.5,
category: "cars"
}
],
bike: [
{
multiple: 0.5,
category: "bike"
}
],
scooter: [
{
multiple: 0.5,
category: "scooter"
}
]
}
]
};

我使用这行代码对类别进行分组,但是

  return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
var data = groupBy(data, "category");

由于我现在有了对象“数据”,所以我想执行进一步的转换我的问题是可以将两个类别分组,这样输出看起来像这样

data = {
vehicles: [
{
name: "Team1",
cars: [
{
multiple: 0.5,
category: "cars"
},
{
multiple: 0.5,
category: "cars"
}
],
bike_scooter: [
{
multiple: 0.5,
category: "bike"
},
{
multiple: 0.5,
category: "scooter"
}
]
},
{
name: "Team2",
cars: [
{
multiple: 0.5,
category: "cars"
},
{
multiple: 0.5,
category: "cars"
}
],
bike_scooter: [
{
multiple: 0.5,
category: "bike"
},
{
multiple: 0.5,
category: "scooter"
}
]
}
]
};

最佳答案

您可以使用两个减少方法来完成此操作,一种用于构建车辆数组,另一种用于通过提供的键数组对每个对象进行分组。

const data = {"vehicles":[{"name":"Team1","cars":[{"multiple":0.5,"category":"cars"},{"multiple":0.5,"category":"cars"}],"bike":[{"multiple":0.5,"category":"bike"}],"scooter":[{"multiple":0.5,"category":"scooter"}]},{"name":"Team2","cars":[{"multiple":0.5,"category":"cars"},{"multiple":0.5,"category":"cars"}],"bike":[{"multiple":0.5,"category":"bike"}],"scooter":[{"multiple":0.5,"category":"scooter"}]}]};

function groupBy(data, keys) {
return data.vehicles.reduce((r, {name,...rest}) => {
const obj = Object.entries(rest).reduce((a, [k, v]) => {
if (keys.includes(k)) {
const key = keys.join('_');
if (!a[key]) a[key] = [...v];
else a[key].push(...v);
} else a[k] = [...v]
return a
}, {name})

r.vehicles.push(obj)
return r;
}, {
vehicles: []
})
}

console.log(groupBy(data, ['bike', 'scooter']))
console.log(groupBy(data, ['bike', 'cars']))

关于javascript - 如何将对象转换为按对象键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59116770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com