Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript通过映射基于另一个对象更新对象键/值_Javascript_Arrays_Object_For Loop_Ecmascript 6 - Fatal编程技术网

javascript通过映射基于另一个对象更新对象键/值

javascript通过映射基于另一个对象更新对象键/值,javascript,arrays,object,for-loop,ecmascript-6,Javascript,Arrays,Object,For Loop,Ecmascript 6,我在某个对象上循环,并根据一些查找更新另一个对象的值,目前在映射中获取正确的值时遇到问题 let users = [ { "id": "123", "email": "john.doe@acme.com", "name": " John Doe", "group": "1", "subgroup": "1" }, { "id": "456", "email": "tom.hans@stk.com", "name": "

我在某个对象上循环,并根据一些查找更新另一个对象的值,目前在映射中获取正确的值时遇到问题

let users = [
  {
    "id": "123",
    "email": "john.doe@acme.com",
    "name": " John Doe",
    "group": "1",
    "subgroup": "1"
  },
  {
    "id": "456",
    "email": "tom.hans@stk.com",
    "name": " Tom hans",
    "group": "2",
    "subgroup": "1"
  }
];

let groupData = [
  {
    id: "1",
    name: "Stars",
    subgroup: [
        {
          id: "1",
          pseudo: "big"
        },
        {
          id: "2",
          pseudo: "small"
        }
      ]
  },
  {
    id: "2",
    name: "Stones",
    subgroup: [
        {
          id: "1",
          pseudo: "tiny"
        },
        {
          id: "2",
          pseudo: "huge"
        }
      ]
  }
];

const allUsers = {};
for (var i = 0; i < users.length; i++) {
    let groupID = users[i].group,
        subgroupID = users[i].subgroup;

    users[i].group = users[i].group ? groupData[groupID][name] : '';
    users[i].subgroup = users[i].subgroup ?
        groupData[groupID].subgroup[subgroupID][name] : '';

    allUsers[users[i].id] = users[i];
}
目前,我的
for循环中存在查找问题,无法获取组/子组的名称


有人能帮忙解决这个问题吗?最好使用ecma6。

您正在使用groupData,就好像它是groupID所在的键一样。但是,它是一个数组。您应该尝试使用它的查找方法:

const allUsers = {};
for (var i = 0; i < users.length; i++) {
    let groupID = users[i].group,
        subgroupID = users[i].subgroup;
    let userGroup = groupData.find(group => group.id === groupID);

    users[i].group = userGroup.name
    users[i].subgroup = userGroup.subgroup.find(subgroup => subgroup.id === subgroupID).pseudo;

    allUsers[users[i].id] = users[i];
}

Object.assign创建一个新对象,这样它就不会改变现有用户。

您正在使用groupData,就好像它是groupID所在的键一样。但是,它是一个数组。您应该尝试使用它的查找方法:

const allUsers = {};
for (var i = 0; i < users.length; i++) {
    let groupID = users[i].group,
        subgroupID = users[i].subgroup;
    let userGroup = groupData.find(group => group.id === groupID);

    users[i].group = userGroup.name
    users[i].subgroup = userGroup.subgroup.find(subgroup => subgroup.id === subgroupID).pseudo;

    allUsers[users[i].id] = users[i];
}
Object.assign创建一个新对象,这样它就不会变异现有用户。

您可以使用
array#reduce
累积用户,并使用
array#find
获取
名称和
子组
名称

let users=[{“id”:“123”,“email”:“john”。doe@acme.com“,”姓名“:”约翰·多伊“,”小组“:”1“,”小组“:”1“},{”id“:”456“,”电子邮件“:”汤姆。hans@stk.com,“姓名”:“汤姆·汉斯”,“小组”:“2”,“小组”:“1”}],
groupData=[{id:“1”,名称:“Stars”,子组:[{id:“1”,伪:“大”},{id:“2”,伪:“小”},{id:“2”,名称:“石头”,子组:[{id:“1”,伪:“小”},{id:“2”,伪:“大”}],
结果=用户。减少((r,用户)=>{
var{name='',subgroup=[]}=groupData.find(o=>o.id==user.group);
r[user.id]=Object.assign({},user,{group:name},{subgroup:subgroup.find(o=>o.id==user.subgroup).pseudo | |'''});
返回r;
}, {});
控制台日志(结果)
您可以使用
array#reduce
累积您的用户,并使用
array#find
获取
名称和
子组
名称

let users=[{“id”:“123”,“email”:“john”。doe@acme.com“,”姓名“:”约翰·多伊“,”小组“:”1“,”小组“:”1“},{”id“:”456“,”电子邮件“:”汤姆。hans@stk.com,“姓名”:“汤姆·汉斯”,“小组”:“2”,“小组”:“1”}],
groupData=[{id:“1”,名称:“Stars”,子组:[{id:“1”,伪:“大”},{id:“2”,伪:“小”},{id:“2”,名称:“石头”,子组:[{id:“1”,伪:“小”},{id:“2”,伪:“大”}],
结果=用户。减少((r,用户)=>{
var{name='',subgroup=[]}=groupData.find(o=>o.id==user.group);
r[user.id]=Object.assign({},user,{group:name},{subgroup:subgroup.find(o=>o.id==user.subgroup).pseudo | |'''});
返回r;
}, {});

控制台日志(结果)在此示例中如何使用对象分配?我们可以用一些映射/过滤等来代替for循环吗?如果用户没有任何组或子组会发生什么?我们如何传递
'
空值?我的意思是组/子组字段根本不存在。最后一行有语法错误。。。你能看一下吗?第二个方法输出未定义的数据,只返回第一个用户错误的数据。第二个代码段是第一个代码段的一部分吗?或独立?在本例中如何使用对象分配?我们可以用一些映射/过滤等来代替for循环吗?如果用户没有任何组或子组会发生什么?我们如何传递
'
空值?我的意思是组/子组字段根本不存在。最后一行有语法错误。。。你能看一下吗?第二个方法输出未定义的数据,只返回第一个用户错误的数据。第二个代码段是第一个代码段的一部分吗?或独立?如果用户没有
字段,会发生什么情况?但他有一个小组。。。基本上,这意味着,我们不能返回任何值,所以两个值都应该返回空值。只需更新此行
user.group&&groupData.find(o=>o.id==user.group)如果用户没有
字段,会发生什么?但他有一个小组。。。基本上,这意味着,我们不能返回任何值,所以两个值都应该返回空值。只需更新此行
user.group&&groupData.find(o=>o.id==user.group)
const allUsers = users.reduce((data, user) => {
    const group = groupData.find(group => group.id === user.group);
    const name = group ? group.name : '';
    const subGroup = group ? group.subgroup.find(subgroup => subgroup.id === user.subgroup): null;
    const pseudo = subGroup ? subGroup.pseudo : '';
    data[user.group] = Object.assign({}, user, { group: name, subGroup: pseudo });
   return data;
}, {});