【问题标题】:Unable to access inner JSON value in JSON array - Typescript(Using Angular 8)无法访问 JSON 数组中的内部 JSON 值 - Typescript(使用 Angular 8)
【发布时间】:2019-12-19 05:13:30
【问题描述】:

我正在尝试在 JSON array 上使用 group by 函数,使用内部 JSON 值作为键,如下所示。但无法读取内部JSON 值。这是我的JSON array

NotificationData = [ 
   { 
      "eventId":"90989",
      "eventTime":"2019-12-11T11:20:53+04:00",
      "eventType":"yyyy",
      "event":{ 
         "ServiceOrder":{ 
            "externalId":"2434",
            "priority":"1"
         }
      }
   },
   { 
      "eventId":"6576",
      "eventTime":"2019-12-11T11:20:53+04:00",
      "eventType":"yyyy",
      "event":{ 
         "ServiceOrder":{ 
            "externalId":"78657",
            "priority":"1"
         }
      }
   }
]

分组逻辑:

const groupBy = (array, key) => {
  return array.reduce((result, currentValue) => {
    (result[currentValue[key]] = result[currentValue[key]] || []).push(
      currentValue
    );
    return result;
  }, {});
};

const serviceOrdersGroupedByExternalId = groupBy(this.NotificationData, 'event.ServiceOrder.externalId');
                                 //this line of code is not working as
                             // it is unable to locate the external id value.

期望的输出

{ "2434":[{
     "eventId":"90989",
     "eventTime":"2019-12-11T11:20:53+04:00",
     "eventType":"yyyy",
     "event":{
        "ServiceOrder":{ "priority":"1" }
     } 
  }],
  "78657":[{
     "eventId":"6576",
     "eventTime":"2019-12-11T11:20:53+04:00",
     "eventType":"yyyy", 
     "event":{
        "ServiceOrder":{ "priority":"1" }
     }
  }]
}  

【问题讨论】:

  • 你能说出想要的输出吗?
  • { "2434":[ { "eventId":"90989", "eventTime":"2019-12-11T11:20:53+04:00", "eventType":"yyyy" , "event":{ "ServiceOrder":{ "priority":"1" } } }], "78657":[ { "eventId":"6576", "eventTime":"2019-12-11T11:20: 53+04:00", "eventType":"yyyy", "event":{ "ServiceOrder":{ "priority":"1" } } }] }

标签: json angular group-by angular8 jsonparser


【解决方案1】:

这能解决你的目的吗?

let group = NotificationData.reduce((r, a) => {
  let d = r[a.event.ServiceOrder.externalId] = [...r[a.event.ServiceOrder.externalId] || [], a];
  return r;
 }, {});
 console.log(group);

【讨论】:

  • 非常感谢。它按预期工作。由于我是初学者,请您简要介绍一下代码吗?
  • 不客气。为了更好地理解,请访问这里consolelog.io/group-by-in-javascript
【解决方案2】:

试试这样:

result = {};

constructor() {
  let externalIds = this.NotificationData.flatMap(item => item.event.ServiceOrder.externalId);

  externalIds.forEach(id => {
      var eventData = this.NotificationData.filter(
        x => x.event.ServiceOrder.externalId == id
      ).map(function(item) {
        delete item.event.ServiceOrder.externalId;
        return item;
      });
      this.result[id] = eventData;
  });
}

Working Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2023-02-20
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多