如何在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