![](/img/trans.png)
[英]how to rearrange recursive json into tree structure with javascript?
[英]Javascript: How to rearrange a json
我希望使用javascript重新排列json。 第一个json具有一个名为ids的数组,并具有名为identifier.id
, id
和address
列。 我想使用javascript创建一个数组,其中有一个数组以相同的identifiers.id进行分组,此数组的名称为具有一列名为identifier.id
的列的identifier.id
并且我想在标识符数组中包含第二个名为registrations的数组具有列ID和地址。
这是我拥有的json:
"ids": [
{
"id": "27675548",
"identifier.id": "156473847",
"address": "Rua Brasilia, 23232, Sao Benedito - BH"
},
{
"id": "27675569",
"identifier.id": "156473847",
"address": "Rua Brasilia, 11, Sao Benedito - BH"
}
这是我想要实现的json:
"identifiers":[
{
"identifier.id":"156473847",
"registrations":[
{
"id": "27675548",
"address": "Rua Brasilia, 23232, Sao Benedito - BH"
},
{
"id": "27675569",
"address": "Rua Brasilia, 11, Sao Benedito - BH"
}
]
}
如您所见,第一个json有两个位置,但是两个位置显示了identifier.id的相同值,第二个json组在数组中具有相同的identifier.id值,并且在此数组内部还有另一个数组来存储列ID和地址。
使用JavaScript可以吗?
如评论中所述,我将亲自使用reduce
创建另一个对象,在该对象中,我将使用identifier.id
作为每个对象的键,以检查ID是否已存在(以防止在每次迭代中进行find
)。
然后,我将使用Object.values
的数组并摆脱不想要的键:您只需要值的数组。
如果不清楚或可以改善,请随时添加任何评论!
const ids = [ { "id": "27675548", "identifier.id": "156473847", "address": "Rua Brasilia, 23232, Sao Benedito - BH" }, { "id": "27675569", "identifier.id": "156473847", "address": "Rua Brasilia, 11, Sao Benedito - BH" }]; const result = Object.values(ids.reduce((acc, item) => { const identifier = item["identifier.id"]; if(!acc[identifier]) acc[identifier] = { "identifier.id": identifier, "registrations": []}; acc[identifier].registrations.push({id: item.id, address: item.address}); return acc; }, {})); console.log(result);
您可以使用以下rearrange
功能,该功能将按指定的groupBy
键将对象groupBy
到指定的集合collectionName
:
function rearrange(data, groupBy, collectionName) { return { identifiers: Object.values(data.ids.reduce((acc, cur) => { if(!acc[cur[groupBy]]) { acc[cur[groupBy]] = { [groupBy]: cur[groupBy], [collectionName]: [] } } const obj = Object.assign({}, cur); delete obj[groupBy] acc[cur[groupBy]][collectionName].push(obj); return acc; }, {})) }; } const data = { "ids": [ { "id": "27675548", "identifier.id": "156473847", "address": "Rua Brasilia, 23232, Sao Benedito - BH" }, { "id": "27675569", "identifier.id": "156473847", "address": "Rua Brasilia, 11, Sao Benedito - BH" }, { "id": "27675561", "identifier.id": "156473848", "address": "Rua Brasilia, 12, Sao Benedito - XX" } ] }; console.log(rearrange(data, 'identifier.id', 'registrations'));
它的工作方式如下:
groupBy
属性的值 groupBy
定义的对象的所有属性复制到新对象,然后将其放入相关组。 identifiers
属性。 我在测试对象中又添加了一项,以演示多个组:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.