我从MongoDB请求中收到一个对象。 以下是它的片段:
{
"Kost": "Kost1",
"Name": "Name1",
"inventar": [
{
"data": "A",
"name": "thefirst",
"ean": "802.0165.813",
},
{
"ean": "802.6725.277",
"name": "thesecond",
"data": "B",
},
{
"ean": "570.6761.483",
"name": "thethird",
"data": "C",
},
{
"ean": "570.6764.519",
"name": "thefourth",
"data": "D",
}
]
}
稍后,我将使用以下代码在Jade中创建一个表:
table(border='1', cellspacing='3', cellpadding='4')
tr
th(align='center') ean
th(align='center') name
th(align='center') data
each obj in inventar
tr
each val in obj
td= val
问题是,数组“inventar”中的对象没有排序。该表结构错误。该表的当前输出如下:
|ean | name | data
--------------------------------------------
|802.0165.813| thefirst | A
|B | thesecond | 802.6725.277
|C | thethird | 570.6761.483
|D | thefourth | 570.6764.519
第一列必须是ean,第二列必须是名称,第三列必须是数据。只有第一行是正确的。我认为这很幸运。
可以在迭代之前对Array中的对象(“inventar”)进行排序,以获得正确的结构吗? 我在某地读过,不可能直接在mongoose中排序。
提前致谢
答案 0 :(得分:2)
您似乎在询问对象中的属性顺序。在ES5及更早版本中,属性按规范没有确定性顺序。有一些实现将维护属性的创建顺序,但这并不能保证。
在ES6中,规范已更改为表示属性将按创建顺序保留。但是,没有机制可以对现有对象重新排序属性。如果要更改顺序,则解决方法是创建新对象,按所需顺序复制属性,然后用新对象替换原始对象。
所有这一切,正常编码不应该关心属性的顺序。你在x.inventar[0].data
中引用对象上的属性,data
是第一个还是最后一个都无关紧要转储对象内容时的属性。
鉴于您在示例表中显示的内容,似乎某些代码正在抓取第一个属性并将其放在第一列中。这是构建表的错误方法。相反,它应该获取一个特定的属性名称,然后对象上的属性顺序无关紧要。所以,我认为您需要做的是修复您的玉器定义以引用特定的属性名称,而不是按顺序将它们接受。
我自己并不了解Jade,但我认为你可以这样做:
table(border='1', cellspacing='3', cellpadding='4')
tr
th(align='center') ean
th(align='center') name
th(align='center') data
each obj in inventar
tr
//edited syntax
td= obj.ean
td= obj.name
td= obj.data