映射JSON数据反向? [英] mapping JSON Data reverse?

查看:96
本文介绍了映射JSON数据反向?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我被困在一个可能很简单的任务上,但是找不到任何解决方案. 我有一些JSON数据-可以说:

I got stuck on a maybe simple task, but could not find any solution. I have some JSON Data - lets say:

[{
  "_id": 1,
  "type": "person",
  "Name": "Hans",
  "WorksFor": ["3", "4"]
}, {
  "_id": 2,
  "type": "person",
  "Name": "Michael",
  "WorksFor": ["3"]
}, {
  "_id": 3,
  "type": "department",
  "Name": "Marketing"
}, {
  "_id": 4,
  "type": "department",
  "Name": "Sales"
}]

据我此处所了解,获得所有内容非常简单他们使用的部门地图阵列一起工作的人员和部门. 然后,我可以将相应的部门映射到该人员,并收到类似以下内容的信息:

As I learned here it is quite simple to get all the persons and the departments they work for together using a map array for the departments. Then I can map the corresponding department to the Person and receive something like:

[{
  "_id": 1,
  "type": "person",
  "Name": "Hans",
  "WorksFor": ["3", "4"],
  "Readable": ["Marketing", "Sales"]
}, {
  "_id": 2,
  "type": "person",
  "Name": "Michael",
  "WorksFor": ["3"],
  "Readable": ["Sales"]
}]

但是对于另一个接口,我需要相反"的数据,例如

But for another interface I need the data "the other way round" e.g.

[{
  "_id": 3,
  "type": "department",
  "Name": "Marketing",
  "employees": [
        "Hans", "Michael"
    ]
}, {
  "_id": 4,
  "type": "department",
  "Name": "Sales",
  "employees": [
        "Hans"
    ]
  }]

是否有实现此结构的适当方法?尝试了两天没让我到任何地方...

Is there any decent way to achieve this structure? Two days of trying didn't get me anywhere...

推荐答案

var data = [{ "_id": 1, "type": "person", "Name": "Hans", "WorksFor": ["3", "4"] }, { "_id": 2, "type": "person", "Name": "Michael", "WorksFor": ["3"] }, { "_id": 3, "type": "department", "Name": "Marketing" }, { "_id": 4, "type": "department", "Name": "Sales" }];

var departments = [],
    persons = [];

data.forEach(e => {
  if (e.type === "person") {
    persons.push(e);
  } else if (e.type === "department") {
    departments.push(e);
    e.employees = [];
  }
});

departments.forEach(d => {
  var workers = persons.filter(p => p.WorksFor.indexOf(d._id.toString()) > -1)
                     /*.map(p => p.Name)*/    // add this if you only need the name instead of the complete "person"

  d.employees = d.employees.concat(workers);
});

console.log(JSON.stringify(departments, null, 4));

这篇关于映射JSON数据反向?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆