我已经在做某事好几天了,但无法弄清楚。我有一个 数据库表(带有虚拟数据)如下所示:
基于key
和value
我想生成json。 field_id
是父级
json 结构。但是我如何在 javascript 中生成这个结构呢?
我已经尝试过这个:
let fields = [
{ id: 1, field_id: null, key: 'key1', value: 'value1'},
{ id: 2, field_id: 1, key: 'key2', value: 'value2'},
{ id: 3, field_id: 2, key: 'key3', value: 'value3'},
{ id: 4, field_id: 1, key: 'key4', value: 'value4'}
];
let result = [];
fields.map(({key, value, id}) => {
let obj = {}; obj[key] = value
fields.forEach((f) => {
if(f.field_id == id) {
let obj2 = {}; obj2[f.key] = f.value
obj = {...obj, ...obj2}
}
});
result.push(obj);
});
console.log(result);
但这显然行不通。我想我需要某种递归函数?
预期输出:
[{
"key1": [{
"key2": [{
"key3": "value3"
}]
},
{
"key4": "value4"
}
]
}]
最佳答案
您可以使用递归函数而不是一级map()
功能。
首先,用 field_id === null
过滤掉值获取根元素。
然后通过使用 fields.filter(field => field.field_id === item.id)
进行过滤来获取其子级并将该函数应用于每个 child 。
let fields = [
{ id: 1, field_id: null, key: 'key1', value: 'value1'},
{ id: 2, field_id: 1, key: 'key2', value: 'value2'},
{ id: 3, field_id: 2, key: 'key3', value: 'value3'},
{ id: 4, field_id: 1, key: 'key4', value: 'value4'}
];
const getNested = (item) => {
const children = fields.filter(field => field.field_id === item.id);
return {
[item.key] : children.length === 0 ? item.value : children.map(field => getNested(field))
}
}
const nestedJSON = fields.filter(field => field.field_id === null).map(field => getNested(field))
console.log(nestedJSON);
希望这有帮助。
关于javascript - 从数据库记录生成递归 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61054581/