如何在javascript中修改对象
我有这个东西如何在javascript中修改对象,javascript,object,ecmascript-6,replace,Javascript,Object,Ecmascript 6,Replace,我有这个东西 users : [ { _id: "5", name: "tomek" }, { _id: "6", name: "janek" }, { _id: "7", name: "Jakub" }, { _id: "8", name: "Pio
users : [
{
_id: "5",
name: "tomek"
},
{
_id: "6",
name: "janek"
},
{
_id: "7",
name: "Jakub"
},
{
_id: "8",
name: "Piotr"
}
],
groups : [
{
users: ["5", "6"],
_id: "22",
name: "group 1"
},
{
users: ["7"],
_id: "33",
name: "group 2"
}
]
}
我想修改一下,他看起来像这样
group:[{name:'group 1',user:[{objects with users belonging to the first group },{...},{...}]}, {name:'group 2',users:[{obj with users belonging to the first group},{...}]},{name:'no group'
,users:[{
objects with users not belonging to any group}]}
}
基于上述目标,我想做一个,
没有组的用户应该被放入组:'没有组',您可以通过几次迭代(映射、筛选等)来完成这项工作,并创建一个新的对象或数组。请稍作调整
const数据={
用户:[
{
_id:'5',
名称:'tomek',
},
{
_id:'6',
姓名:“janek”,
},
{
_id:'7',
姓名:“Jakub”,
},
{
_id:'8',
名称:“Piotr”,
},
],
小组:[
{
用户:['5','6'],
_id:'22',
名称:“组1”,
},
{
用户:['7'],
_id:'33',
名称:“第2组”,
},
],
};
//在“一个”命令中将所有组和用户打包在一起
常数结果=[
//spread运算符以分散组
…data.groups.map((组)=>({
//展开组属性,也可以单独指定它们
…集团,
//查找id为的用户
用户:group.users.map((id)=>data.users.find((user)=>id==user,
})),
//添加一个特殊组
{
名称:'无组',
//过滤用户
用户:data.users.filter(
(用户)=>
//检查用户是否不是组的一部分
!data.groups
.map((组)=>group.users)
//展开()将[“5”、“6”]、[“7”]]变为[“5”、“6”、“7”]
.flat()
.包括(用户id)
),
},
];
console.log(结果);
使用ES6 map/reduce/filter/find数组函数,例如:
// Your input
const input={users:[{_id:"5",name:"tomek"},{_id:"6",name:"janek"},{_id:"7",name:"Jakub"},{_id:"8",name:"Piotr"}],groups:[{users:["5","6"],_id:"22",name:"group 1"},{users:["7"],_id:"33",name:"group 2"}]};
// List all users in a group
const usersInGroup = input.groups.reduce((acc, g) => [...acc, ...g.users], []);
// Final "groups" Array
const groups = [
...input.groups.map(g => ({
name: g.name,
users: g.users.map((user) => input.users.find(u => u._id === user))
})),
{
name: 'NO GROUP',
users: input.users.filter(u => !usersInGroup.includes(u._id))
}
];
// Display groups
console.log(JSON.stringify(groups, null, ' '));
有点老派
<script>
var people = { users : [
{
_id: "5",
name: "tomek"
},
{
_id: "6",
name: "janek"
},
{
_id: "7",
name: "Jakub"
},
{
_id: "8",
name: "Piotr"
}
],
groups : [
{
users: ["5", "6", "12"],
_id: "22",
name: "group 1"
},
{
users: ["7"],
_id: "33",
name: "group 2"
}
]
}
var newgroups = []
var notfoundusers = []
for (var g=0; g<people.groups.length; g++)
{
var users = []
for (var u=0; u<people.groups[g].users.length; u++)
{
var p = people.users.find( x => x._id == people.groups[g].users[u] )
if ( p != undefined )
{
users.push(p);
}
else
{
notfoundusers.push( { group: people.groups[g].name, user: people.groups[g].users[u] } );
}
}
var group = { name: people.groups[g].name, user: users}
newgroups.push(group);
}
var notfoundgroup = { name: "no group", user: notfoundusers}
newgroups.push(notfoundgroup)
console.log(JSON.stringify(newgroups))
</script>
var people={用户:[
{
_id:“5”,
名称:“托梅克”
},
{
_id:“6”,
姓名:“janek”
},
{
_id:“7”,
姓名:“Jakub”
},
{
_id:“8”,
姓名:“Piotr”
}
],
小组:[
{
用户:[“5”、“6”、“12”],
_身份证号码:“22”,
名称:“第1组”
},
{
用户:[“7”],
_身份证号码:“33”,
名称:“第2组”
}
]
}
var newgroups=[]
var notfoundusers=[]
对于(var g=0;gIn)您所需的代码作为输出的一部分,您有名称:'grupa one'
,但这不在您的输入代码中。这是一个打字错误,还是您真的想要它?对不起,是我的错误,grupa one->group 1