Javascript 嵌套在JSON对象数组中的JSON对象数组

Javascript 嵌套在JSON对象数组中的JSON对象数组,javascript,arrays,node.js,json,object,Javascript,Arrays,Node.js,Json,Object,我有一个JSON格式的对象数组 var employees = [ { "employee1": "employee1", "Details": [ { "title": "Software Engineer", "EmployeeId": 451 } ] }, { "employee2": "employee2", "Details": [] }, { "employe

我有一个JSON格式的对象数组

var employees = 
[
  {
    "employee1": "employee1",
    "Details": [
      {
        "title": "Software Engineer",
        "EmployeeId": 451
      }
    ]
  },
  {
    "employee2": "employee2",
    "Details": []
  },
  {
    "employee3": "employee3",
    "Details": [
      {
        "title": "Test analyst",
        "EmployeeId": 453
      }
    ]
  },
  {
    "employee4": "employee4",
    "Details": [
      {
        "title": "Software engineer",
        "EmployeeId": 487
      },
      {
        "title": "Architect",
        "EmployeeId": 500
      }
    ]
  }
]
获取员工ID的最佳方式是什么

预期产出:

[451,453,487,500]
当我使用:

console.log(Object.assign({}, ...employees).Details.map(t=>t.EmployeeId))
它将返回以下结果:

[487,500]

有没有办法在结果中连接其他员工ID?

首先-它不是JSON,只是一个数组。其次,使用flatMap和map,如下所示:

var雇员=[{ 雇员1:雇员1, 详情:[{ 职称:软件工程师, 雇员编号:451 }] }, { 雇员2:雇员2, 详情:[] }, { 雇员3:雇员3, 详情:[{ 标题:测试分析员, 雇员编号:453 }] }, { 雇员4:雇员4, 详情:[{ 职称:软件工程师, 雇员编号:487 }, { 标题:建筑师, 雇员编号:500 } ] } ]; var id=employees.flatMap{Details}=>Details.map{EmployeeId}=>EmployeeId;
console.logids 首先,它不是JSON,只是一个数组。其次,使用flatMap和map,如下所示:

var雇员=[{ 雇员1:雇员1, 详情:[{ 职称:软件工程师, 雇员编号:451 }] }, { 雇员2:雇员2, 详情:[] }, { 雇员3:雇员3, 详情:[{ 标题:测试分析员, 雇员编号:453 }] }, { 雇员4:雇员4, 详情:[{ 职称:软件工程师, 雇员编号:487 }, { 标题:建筑师, 雇员编号:500 } ] } ]; var id=employees.flatMap{Details}=>Details.map{EmployeeId}=>EmployeeId; console.logids 尽管我认为这是一个很好的答案,但不要使用支持有问题的flatMap,请注意,这里的答案依赖于reduce和spread操作符:

没有蔓延,使用平面

无铺展或平整,使用[]。混凝土应用[],arr

这些工作的例子:

var employee1:employee1,详细信息:[{title:软件工程师,EmployeeId:451}},{employee2:employee2,详细信息:[},{employee3:employee3,详细信息:[{title:测试分析师,EmployeeId:453},{employee4:employee4,详细信息:[{title:软件工程师,EmployeeId:487},{title:架构师,EmployeeId:500}]; 让_ //设置我们的方法并命名它们 数组_concat=employees.reducea,v=>v.Details&&a.pushv.Details.mapo=>o.EmployeeId,[].concat.apply[],a,[] .name=使用Arrayconcat, spread=employees.reducea,v=>v.Details&&a.push…v.Details.mapo=>o.EmployeeId,a,[] .name=使用扩展运算符, flat=employees.reducea,v=>v.Details和&a.pushv.Details.mapo=>o.EmployeeId,a.flat1,[] .name=使用平面, //测试它是否有效! isCorrect=arr,json=json.stringifyarr,{name}=arr=> console.info json===[451453487500]`${name}已通过!`:`${name}失败`; isCorrectarray_concat; 正确的传播; 是正确的平面 尽管我认为这是一个很好的答案,但不要使用支持有问题的flatMap,请注意,这里的答案依赖于reduce和spread操作符:

没有蔓延,使用平面

无铺展或平整,使用[]。混凝土应用[],arr

这些工作的例子:

var employee1:employee1,详细信息:[{title:软件工程师,EmployeeId:451}},{employee2:employee2,详细信息:[},{employee3:employee3,详细信息:[{title:测试分析师,EmployeeId:453},{employee4:employee4,详细信息:[{title:软件工程师,EmployeeId:487},{title:架构师,EmployeeId:500}]; 让_ //设置我们的方法并命名它们 数组_concat=employees.reducea,v=>v.Details&&a.pushv.Details.mapo=>o.EmployeeId,[].concat.apply[],a,[] .name=使用Arrayconcat, spread=employees.reducea,v=>v.Details&&a.push…v.Details.mapo=>o.EmployeeId,a,[] .name=使用扩展运算符, flat=employees.reducea,v=>v.Details和&a.pushv.Details.mapo=>o.EmployeeId,a.flat1,[] .name=使用平面, //测试它是否有效! isCorrect=arr,json=json.stringifyarr,{name}=arr=> console.info json===[451453487500]`${name}已通过!`:`${name}失败`; isCorrectarray_concat; 正确的传播; 是正确的平面 您可以尝试嵌套的reduce方法。这工作速度很快,并且没有使用任何ES5或更高版本

var雇员=[{ 雇员1:雇员1, 详情:[{ 职称:软件工程师, 雇员编号:451 }] }, { 雇员2:雇员2, 详情:[] }, { 雇员3:雇员3, 详情:[{ 标题:测试分析员, 雇员编号:453 }] }, { 雇员4:雇员4, 详情:[{ 职称:软件工程师, 雇员编号:487 }, { 标题:建筑师, 雇员编号:500 } ] } ]; var id=employees.reducefunctiona,b{ 返回b.Details.reduceFunction c,d{ c、 pushd.EmployeeId; 返回c; },a; }, []; console.logids 您可以尝试嵌套的reduce方法。这工作速度很快,不使用任何ES5或hi 盖尔

var雇员=[{ 雇员1:雇员1, 详情:[{ 职称:软件工程师, 雇员编号:451 }] }, { 雇员2:雇员2, 详情:[] }, { 雇员3:雇员3, 详情:[{ 标题:测试分析员, 雇员编号:453 }] }, { 雇员4:雇员4, 详情:[{ 职称:软件工程师, 雇员编号:487 }, { 标题:建筑师, 雇员编号:500 } ] } ]; var id=employees.reducefunctiona,b{ 返回b.Details.reduceFunction c,d{ c、 pushd.EmployeeId; 返回c; },a; }, [];
console.logids;首先,不要把它看作JSON。。。它不是。。。这是一个javascript对象,jSON是一种数据交换字符串格式-你没有处理它-你知道你的尝试为什么没有成功吗?employees.mapm=>m.Details.mapm=>m.EmployeeId。flat@keith-或employees.flatmap=>m.Details.mapm=>m.EmployeeId:p@JaromandaX是的,平面地图会更好,我把它保持在2个贴图的位置,希望能把OP指向他失败的方向。@Keith有没有不使用flatmap或flat来找到值的方法?我先在节点版本中写这个,不要把它看作JSON。。。它不是。。。这是一个javascript对象,jSON是一种数据交换字符串格式-你没有处理它-你知道你的尝试为什么没有成功吗?employees.mapm=>m.Details.mapm=>m.EmployeeId。flat@keith-或employees.flatmap=>m.Details.mapm=>m.EmployeeId:p@JaromandaX是的,平面地图会更好,我把它保持在2个贴图的位置,希望能把OP指向他失败的方向。@Keith有没有不使用flatmap或flat来找到值的方法?我在节点版本中写这篇文章,对Array.prototype.flatMap没有太多的浏览器支持不幸的是~@Phil我从不担心这个,transfile&polyfill。很酷。只是想在开始获取之前添加一个注释,上面写着“flatMap不是函数”@Phil我会在其中添加一个polyfill,别担心。Array.prototype.flat在节点<11中也不可用。Array.prototype.flatMap不太受浏览器支持。不幸的是~@Phil我从不担心这一点,Transfile&polyfill。很酷。只是想在开始获取之前添加一个注释,上面写着“flatMap不是函数”@Phil我会添加一个多边形填充,别担心。Array.prototype.flat在节点<11中也不可用
employees
  .reduce((a, v) => 
   ( v.Details && a.push(...v.Details.map(o=>o.EmployeeId)), a)
  , []);
employees
  .reduce((a, v) => 
   ( v.Details && a.push(v.Details.map(o=>o.EmployeeId)), a.flat(1))
  , []);
employees
  .reduce((a, v) => 
   ( v.Details && a.push(v.Details.map(o=>o.EmployeeId)), [].concat.apply([], a))
  , []);