我需要从一个节点创建一个嵌套的json对象 - mysql结果(json对象)这里是我试图完成的事情
这些是我拥有的mysql json对象:
plants:
[{id: 1, name: 'plant 1'},
{id: 2, name: 'plant 2'}]
areas:
[{id: 1, nombre: 'area 1', plants_id: 1 },
{ id: 2, nombre: 'area 1 - plant 2', plantas_id: 2 },
{ id: 3, nombre: 'area n', plantas_id: 1 }]
machines:
[{id: 1, nombre: 'machine 1 - area 1', areas_id: 1 },
{ id: 2, nombre: 'machine 1 - area 2', areas_id: 2 },
{ id: 3, nombre: 'machine n', areas_id: 2 }]
这是我需要使用前一个json的值创建的json:
{
"plants":[
{
"name":"plant 1",
"areas": [
{ "name":"area 1",
"machines":[
{"nombre":"machine 1 - area 1"
}]
},
{ "nombre":"area 2",
"machines":[
{"nombre":"machine 1 - area 2"
}]
}
]
},
{
"name":"plant 2",
"areas": [
{ "nombre":"area 1 - plant 2",
"maquinas":[ ]
}
]
}
]
}
我一直尝试使用嵌套for循环,但它很乱,我读到linq,但我从未使用过它
抱歉英文不好。任何帮助表示赞赏
谢谢和问候
答案 0 :(得分:0)
这不是一种有效的解决方案,但如果您的数据集较小,则可以正常使用。
var plants = [
{ id: 1, name: 'plant 1' },
{ id: 2, name: 'plant 2' },
];
var areas = [
{ id: 1, nombre: 'area 1', plantas_id: 1 }, // there was a spelling mistake here
{ id: 2, nombre: 'area 1 - plant 2', plantas_id: 2 },
{ id: 3, nombre: 'area n', plantas_id: 1 },
];
var machines = [
{ id: 1, nombre: 'machine 1 - area 1', areas_id: 1 },
{ id: 2, nombre: 'machine 1 - area 2', areas_id: 2 },
{ id: 3, nombre: 'machine n', areas_id: 2 },
];
console.time('result');
function result() {
return plants.map(function(plant) {
return {
"name": plant.name,
"areas": areas.filter(function(area) {
return area.plantas_id == plant.id;
}).map(function(area) {
return {
"nombre": area.nombre,
"machines": machines.filter(function(machine) {
return machine.areas_id == area.id;
}).map(function(machine) {
return {
"nombre": machine.nombre,
};
}),
};
}),
};
});
}
console.timeEnd('result');
console.log(result());