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

Dev*_*Dev 1 javascript arrays json object node.js

我有一个 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
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

获取 EmployeeId 的最佳方式是什么?

预期输出:

[451,453,487,500]
Run Code Online (Sandbox Code Playgroud)

当我使用时:

console.log(Object.assign({}, ...employees).Details.map(t=>t.EmployeeId))
Run Code Online (Sandbox Code Playgroud)

它返回的结果为:

[487,500]
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ord 5

首先 - 它不是 JSON,只是一个数组。其次,使用flatMapandmap像这样:

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
      }
    ]
  }
];

var ids = employees.flatMap(({ Details }) => Details.map(({ EmployeeId }) => EmployeeId));

console.log(ids);
Run Code Online (Sandbox Code Playgroud)

Polyfill 没有- 由MDN 的替代方案flatMap提供:

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
      }
    ]
  }
];

var ids = employees.reduce((acc, { Details }) => acc.concat(Details.map(({ EmployeeId }) => EmployeeId)), []);

console.log(ids);
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,浏览器对“Array.prototype.flatMap()”的支持不多〜https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap#Browser_compatibility (2认同)