将SQL结果转换为嵌套的Javascript对象
我使用Javascript返回SQL结果,如下所示:将SQL结果转换为嵌套的Javascript对象,javascript,Javascript,我使用Javascript返回SQL结果,如下所示: { machine_class: 'MAN', machine: '001', start: '2020-01-02 18:27:38', end: '2020-01-02 18:30:22', code: 'ready' }, { machine_class: 'CMD', machine: '002', start: '2020-01-02 18:30:22', end: '2020-01-02 18:
{
machine_class: 'MAN',
machine: '001',
start: '2020-01-02 18:27:38',
end: '2020-01-02 18:30:22',
code: 'ready'
},
{
machine_class: 'CMD',
machine: '002',
start: '2020-01-02 18:30:22',
end: '2020-01-02 18:30:53',
code: 'ready'
},
{
machine_class: 'CMD',
machine: '002',
start: '2020-01-02 18:30:53',
end: '2020-01-02 18:31:16',
code: 'delay'
},
{
machine_class: 'CMD',
machine: '003',
start: '2020-01-02 18:31:16',
end: '2020-01-02 18:31:29',
code: 'ready'
}
[
{
machine_class: "CMD",
data: [
{
machine: "002",
data: [
{
timeRange: ['2020-01-02 18:30:22', '2020-01-02 18:30:53'],
val: 'ready'
},
{
timeRange: ['2020-01-02 18:30:53', '2020-01-02 18:31:16'],
val: 'delay'
},
(...)
]
},
{
machine: "003",
data: [...]
},
(...)
],
},
{
machine_class: "MAN",
data: [...]
},
(...)
]
我需要先按machine_类嵌套结果,然后按如下所示的机器嵌套结果:
{
machine_class: 'MAN',
machine: '001',
start: '2020-01-02 18:27:38',
end: '2020-01-02 18:30:22',
code: 'ready'
},
{
machine_class: 'CMD',
machine: '002',
start: '2020-01-02 18:30:22',
end: '2020-01-02 18:30:53',
code: 'ready'
},
{
machine_class: 'CMD',
machine: '002',
start: '2020-01-02 18:30:53',
end: '2020-01-02 18:31:16',
code: 'delay'
},
{
machine_class: 'CMD',
machine: '003',
start: '2020-01-02 18:31:16',
end: '2020-01-02 18:31:29',
code: 'ready'
}
[
{
machine_class: "CMD",
data: [
{
machine: "002",
data: [
{
timeRange: ['2020-01-02 18:30:22', '2020-01-02 18:30:53'],
val: 'ready'
},
{
timeRange: ['2020-01-02 18:30:53', '2020-01-02 18:31:16'],
val: 'delay'
},
(...)
]
},
{
machine: "003",
data: [...]
},
(...)
],
},
{
machine_class: "MAN",
data: [...]
},
(...)
]
我能想到的唯一解决方案是复杂而缓慢的,JavaScript中是否有内置的东西可以嵌套这样的对象?如果使用对象进行索引,那么速度应该不会太慢,输出是否正常 下一行还对源代码进行了索引,以便更好地理解它是如何工作的,因为它是一个数据驱动的算法
var dbInput=[{machine_class:'MAN',machine:'001',start:'2020-01-02 18:27:38',end:'2020-01-02 18:30:22',code:'ready'},{machine_class:'CMD',machine:'002',start:'2020-01-02 18:30:22',end:'2020-01-02 18:30:53',code:'ready'},{machine_class:'CMD',machine:'002',start:'2020-01-02 18:30:53',end:'2020-01-02 18:31:16',code:'delay'},{machine_class:'CMD',machine:'003',start:'2020-01-02 18:31:16',end:'2020-01-02 18:31:29',code:'ready'};
var res=转换(dbInput);
var merge=res.pop();
document.body.innerHTML='var Result='+JSON.stringify(res,null,2)+''+
“
”+
'var IndexedSource='+JSON.stringify(merge,null,2)+';
函数转换(dbInput){
var merge={};
for(var r=0;r }
通过一些简单的JS技巧绝对没有办法做到这一点,但如果你在JS对象中使用关联数组,你应该能很快得到结果。如果你满意,请注意upvote或accept下的voting按钮……这太棒了,谢谢,我将能够使用它作为我所有SQL-to-JavaScript的模板。