gpt4 book ai didi

javascript - 将 JSON 排列成树状结构

转载 作者:行者123 更新时间:2023-11-29 16:07:58 25 4
gpt4 key购买 nike

我有一个纯 JSON,其中包含其从属对象的 ID。

 var array1=  

[
{
"id": 84,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": null,
"isRemoved": false,
"isPrimary": false
},
{
"id": 95,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 84,
"isRemoved": false,
"isPrimary": false
},
{
"id": 150,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 95,
"isRemoved": false,
"isPrimary": false
},
{
"id": 160,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 95,
"isRemoved": false,
"isPrimary": false
}
]

我想通过识别“id”和“previousOutputTypeActivitySeqMappingId”并将其插入一个名为的新数组来转换为以下格式 项目

var array1=

[{
"id": 84,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": null,
"isRemoved": false,
"isPrimary": false,
"items": [
{
"id": 95,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 84,
"isRemoved": false,
"isPrimary": false,
"items": [
{
"id": 150,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 95,
"isRemoved": false,
"isPrimary": false,
"items": []
},
{
"id": 160,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": 95,
"isRemoved": false,
"isPrimary": false,
"items": []
}
]
}
]
}]

我试过的代码如下...我首先以新格式创建了一个虚拟对象:

var dummyObj= {
"id": 84,
"outputTypeId": 900000000000002,
"previousOutputTypeActivitySeqMappingId": null,
"isRemoved": false,
"isPrimary": false
}
function populateObj(array1, arrObj) {
for (var i = 0; i < array1.length; i++) {
if (array1[i].id == arrObj.parentActivityId) {
array1[i].items.push(arrObj);
} else {
populateObj(array1[i].items, arrObj);
}
}
};

populateObj(dummyObj);

因为我不想一开始就硬编码一个虚拟对象。有什么方法可以使用 javascript 实现这种转换?
谢谢。

最佳答案

这可以通过一些函数和一些递归很容易地完成。

第一个函数将整个源数组作为源对象并添加 items 属性:

function createObject(sourceArray, obj)
{
obj.items = createArray(sourceArray, obj.id);
return obj;
}

这又使用另一个函数来过滤子项的源数组:

function createArray(sourceArray, id){
return sourceArray.filter(function(e){
return e.previousOutputTypeActivitySeqMappingId == id;
})
.map(function(e){
return createObject(sourceArray,e);
})
}

您会注意到在 tun 中回调 createObject 函数以递归地继续构建树。

最后一部分是通过查找具有 null 父值的项目

var result = createArray(input,null);

实例:https://jsfiddle.net/3epjb93j/

关于javascript - 将 JSON 排列成树状结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com