Ank*_*kit 0 javascript ecmascript-6
我有这样的数据集:
[ { city: 'a', value: 1, sector: 'Hospital' },
{ city: 'b', value: 1, sector: 'Hardware' },
{ city: 'c', value: 1, sector: 'Hardware' },
{ city: 'd', value: 1, sector: 'Networking' },
{ city: 'e', value: 1, sector: 'Hospital' },
{ city: 'f', value: 1, sector: 'Education' },
{ city: 'g', value: 1, sector: 'Transport' },
{ city: 'h', value: 1, sector: 'Food' },
{ city: 'i', value: 1, sector: 'Networking' },
{ city: 'j', value: 0.7, sector: 'Software' },
{ city: 'k', value: 0.7, sector: 'Education' },
{ city: 'l', value: 0.7, sector: 'Food' },
{ city: 'm', value: 0.7, sector: 'Hospital' },
{ city: 'n', value: 0.2, sector: 'Networking' },
{ city: 'o', value: 0.2, sector: 'Networking' },
{ city: 'p', value: 0.2, sector: 'Industrial' },
{ city: 'q', value: 0.2, sector: 'Transport' },
{ city: 'r', value: 0.2, sector: 'Software' } ]
Run Code Online (Sandbox Code Playgroud)
现在我想将对象数组转换为具有Array的对象,具有相同重复扇区的城市应该属于特定组.
期望的输出如下:
[
{
sector: "Hospital",
place: ["a", "e", "m"]
},
{
sector: "Hardware",
place: ["b", "c"]
},
{
sector: "Networking",
place: ["d", "i", "n", "o"]
},
{
sector: "Education",
place: ["f", "k"]
},
{
sector: "Transport",
place: ["g", "q"]
},
{
sector: "Food",
place: ["h", "l"]
},
{
sector: "Software",
place: ["j", "r"]
},
{
sector: "Industrial",
place: ["q"]
},
]
Run Code Online (Sandbox Code Playgroud)
有谁建议我如何做这种类型的任务.任何帮助或建议真的很感激.
我有一个线索,这个事情将通过reduce和map函数来完成,但是这将是什么样的挑战.
我试图让扇区重复计数如此,但没有实现我想要的输出:
let x = data.reduce((m, c) => {
if (c.sector in m) m[c.sector].count += 1;
else m[c.sector] = { sector: c.sector, count: 1 };
return m;
}, {});
console.log(x)
Run Code Online (Sandbox Code Playgroud)
您可以先提取所有uniq扇区array.
之后map进入每个扇区并filter在您的数据中对应哪个位置.
var data = [{ city: 'a', value: 1, sector: 'Hospital' },
{ city: 'b', value: 1, sector: 'Hardware' },
{ city: 'c', value: 1, sector: 'Hardware' },
{ city: 'd', value: 1, sector: 'Networking' },
{ city: 'e', value: 1, sector: 'Hospital' },
{ city: 'f', value: 1, sector: 'Education' },
{ city: 'g', value: 1, sector: 'Transport' },
{ city: 'h', value: 1, sector: 'Food' },
{ city: 'i', value: 1, sector: 'Networking' },
{ city: 'j', value: 0.7, sector: 'Software' },
{ city: 'k', value: 0.7, sector: 'Education' },
{ city: 'l', value: 0.7, sector: 'Food' },
{ city: 'm', value: 0.7, sector: 'Hospital' },
{ city: 'n', value: 0.2, sector: 'Networking' },
{ city: 'o', value: 0.2, sector: 'Networking' },
{ city: 'p', value: 0.2, sector: 'Industrial' },
{ city: 'q', value: 0.2, sector: 'Transport' },
{ city: 'r', value: 0.2, sector: 'Software' } ];
var sectors = [];
data.map(d => {
if(sectors.indexOf(d.sector) === -1){
sectors.push(d.sector);
}
})
sectors = sectors.map(sector => {
return {
sector,
places:data.filter(d => d.sector === sector).map(d => d.city)
}
});
console.log(sectors)Run Code Online (Sandbox Code Playgroud)