我想根据这些值从单个JSON创建两个JSON。 下面是主要的JSON结构。
x = [
{id:"1",hobby:"videogames"},
{id:"1",hobby:"chess"},
{id:"2",hobby:"chess"},
{id:"3",hobby:"carrom"},
{id:"4",hobby:"videogames"},
{id:"4","hobby:"carrom"}
]
我想创建两个基于ID和爱好的JSON。 使得每个唯一ID将具有与其各自爱好的数组,且每个唯一爱好将具有与其各自提供者的数组
ID =[
{
1: [
{hobby:"videogames"},
{hobby:"chess"}
]
},
{
2: [
{hobby:"chess"}
]
},
{
3: [
{hobby:"carrom"}
]
},
{
4: [
{hobby:"videogames"},
{hobby:"carrom"}
]
}
];
Hobby= [
{
videogames:[
{id:"1"},
{id:"4"}
]
},
{
chess:[
{id:"2"}
]
},
{
carrom:[
{id:"3"},
{id:"4"}
]
}
]
您需要应用array.Reduce
函数来构建一个以IDS
或Hobbies
为键的字典,然后运行array.Map
将该字典转换为多个数组条目:
null
let x = [
{id:"1",hobby:"videogames"},
{id:"1",hobby:"chess"},
{id:"2",hobby:"chess"},
{id:"3",hobby:"carrom"},
{id:"4",hobby:"videogames"},
{id:"4",hobby:"carrom"}
];
let grouped = x.reduce((acc, cur) => {
let {id, ...rest} = cur;
if(!acc[id]){
acc[id] = [];
}
acc[id].push(rest);
return acc;
}, {});
let result = Object.entries(grouped).map(([key, value]) => ({[key]: value}))
console.log(result);
您可以尝试使用数组reduce
函数。 我还要说,在对象中拥有hobby
和id
属性是多余的,因为变量名已经暗示了属性中包含的数据的含义。
null
var x = [
{id:"1",hobby:"videogames"},
{id:"1",hobby:"chess"},
{id:"2",hobby:"chess"},
{id:"3",hobby:"carrom"},
{id:"4",hobby:"videogames"},
{id:"4",hobby:"carrom"}
];
var ID = x.reduce((acc, curr) => {
acc[curr.id] = acc[curr.id] || [];
acc[curr.id].push(curr.hobby);
return acc;
}, Object.create(null));
var Hobby = x.reduce((acc, curr) => {
acc[curr.hobby] = acc[curr.hobby] || [];
acc[curr.hobby].push(curr.id);
return acc;
}, Object.create(null));
console.log('ID: ', ID);
console.log('Hobby: ', Hobby);
.as-console-wrapper { max-height: 100% !important; top: 0; }