【问题标题】:Creating custom json objects using changeable number of variables使用可变数量的变量创建自定义 json 对象
【发布时间】:2019-12-30 03:14:24
【问题描述】:

我有这个 json 对象:

[
  {
    "trip": [
      {
        "place": {
          "id": 8,
          "name": "New York",
        },
        "group": 1
      }
  },
  ...
]

我可以有 N 个组,所以我需要创建一个对象数组,如下所示:

[
   {
     "group1": "New York",
     "group2": "Los Angeles",
     "group3": "Rome",
     ...
   }
]

每个组称为 groupX,其中 X 是取自第一个数组中每个对象的每个“组”实例的数字,他的值必须取自第一个数组中每个对象的“名称”实例。

我该怎么做?提前致谢!

【问题讨论】:

  • 在 JS 中,obj.property1 等价于 obj['property' + 1]obj['prop' + 'erty1']
  • 您真的想要一个包含单个对象的数组作为输出,其中该单个对象的属性是所有组的名称吗?
  • 非常感谢@hugo 的帮助,问题已解决。

标签: javascript arrays node.js json javascript-objects


【解决方案1】:

你可以这样做:

let data = [
  { 'trip': [{ 'place': { 'id': 8, 'name': 'New York' }, 'group': 1 }] },
  { 'trip': [{ 'place': { 'id': 9, 'name': 'Los Angeles' }, 'group': 2 }] },
  { 'trip': [{ 'place': { 'id': 10, 'name': 'Rome' }, 'group': 3 }] },
]

let grouped = data.reduce(function(grouped, current) {
  grouped['group' + current.trip[0].group] = current.trip[0].place.name;

  return grouped;
}, {})

console.log(grouped);

【讨论】:

    【解决方案2】:

    .map() 可以方便地获取结果数组,将函数应用于现有数组的每个元素。像这样的:

    var obj = [{
        "trip": [{
          "place": {
            "id": 8,
            "name": "New York",
          },
          "group": 1
        }]
      },
      {
        "trip": [{
          "place": {
            "id": 8,
            "name": "london",
          },
          "group": 2
        }]
      },
      {
        "trip": [{
          "place": {
            "id": 8,
            "name": "tokyo",
          },
          "group": 3
        }]
      },
    ]
    var result = obj.map((array_element) => {
      let group = "group" + String(array_element['trip'][0]['group'])
      let place = String(array_element['trip'][0]['place']['name'])
      let to_return = {};
      to_return[group] = place
      return to_return;
    })
    console.log(result)
    /*
    [
    { "group1": "New York" },
    { "group2": "london" },
    { "group3": "tokyo" }
    ]
    */

    【讨论】:

    • 1.为什么 String(...) 转换?两者似乎都是多余的。 2. 只写return {[group]: place} 而不是最后三行。 3. OP 要求单个 obj 具有 N 个键“groupN”,而不是每个键都有 N 个 obj。
    • @Lorenzo 如果您将上述内容作为具有单个元素的数组 .reduce() 可能会更好。目前还不清楚您需要什么。
    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 2016-04-02
    • 2016-01-26
    • 1970-01-01
    • 2018-06-19
    • 2020-02-16
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多