如何在 Javascript/AngularJS 中按 Json 对象分组

How to Group By Json object in Javascript/AngularJS

我有一个 json 对象,它有一个 zip 条目。在下面的 json 对象中,“邮政编码”键下有邮政编码条目,基本上我想按邮政编码对其进行分组以显示哪个邮政编码属于所有区域 ID。

例如 - 邮政编码 7 属于 zoneIds 12005、12008、12006、12009,而邮政编码 12 属于 zoneIds 12004、11001。最终目标是在一些错误消息中显示这一点。

var Json = [{
City: "ABC",
ZipCode: "7",
ZoneID: 12008,
ZoneName: "test_TP41"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12005,
ZoneName: "test_TP4"
},
{City: "ABC",
ZipCode: "7",
ZoneID: 12007,
ZoneName: "test_TP456"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12006,
ZoneName: "test_TP5"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12009,
ZoneName: "testgrp16"},
{City: "CDE",
ZipCode: "12",
ZoneID: 12004,
ZoneName: "test_TP2"},
{City: "CDE",
ZipCode: "12",
ZoneID: 11001,
ZoneName: "test 20201"
}]

更多分类可以关注

使用 ES5+,

var grouped = _.mapValues(_.groupBy(Json , 'ZipCode'),
                          singleObject=> singleObject.map(item=> _.omit(Json , 'ZipCode')));

console.log(grouped);

希望对您有所帮助

您可以遍历并创建一个以 ZipCode 为键、以 ZoneID 为值的对象

const Json = [{
City: "ABC",
ZipCode: "7",
ZoneID: 12008,
ZoneName: "test_TP41"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12005,
ZoneName: "test_TP4"
},
{City: "ABC",
ZipCode: "7",
ZoneID: 12007,
ZoneName: "test_TP456"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12006,
ZoneName: "test_TP5"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12009,
ZoneName: "testgrp16"},
{City: "CDE",
ZipCode: "12",
ZoneID: 12004,
ZoneName: "test_TP2"},
{City: "CDE",
ZipCode: "12",
ZoneID: 11001,
ZoneName: "test 20201"
}];

const ZipMappedObj = {}

Json.forEach((k)=>{
if(ZipMappedObj[k.ZipCode]){
  ZipMappedObj[k.ZipCode].push(k.ZoneID)
} else {
ZipMappedObj[k.ZipCode] = [k.ZoneID]
}
})
console.log(ZipMappedObj)

您可以执行以下操作以获得这样的结构,

obj = {
  ZipCode: [all the objects with this ZipCode],
}

Json = [{
City: "ABC",
ZipCode: "7",
ZoneID: 12008,
ZoneName: "test_TP41"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12005,
ZoneName: "test_TP4"
},
{City: "ABC",
ZipCode: "7",
ZoneID: 12007,
ZoneName: "test_TP456"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12006,
ZoneName: "test_TP5"},
{City: "ABC",
ZipCode: "7",
ZoneID: 12009,
ZoneName: "testgrp16"},
{City: "CDE",
ZipCode: "12",
ZoneID: 12004,
ZoneName: "test_TP2"},
{City: "CDE",
ZipCode: "12",
ZoneID: 11001,
ZoneName: "test 20201"
}]

const res = Json.reduce((acc, curr) => {
  if(acc.hasOwnProperty(curr.ZipCode)) {
    acc[curr.ZipCode].push(curr);
  } else {
    acc[curr.ZipCode] = [curr];
  }
  return acc;
}, {});

console.log(res);

如果你愿意,你可以通过这样做只在数组中插入 ZoneID,

acc[curr.ZipCode] = [curr.ZoneID];

acc[curr.ZipCode].push(curr.ZoneID);