我有一个对象'test':
var test={
"unit3":[
{
"chapter":{
"id":4,
"name":"earth",
"id_above":2
}
},
{
"book":{"name":"earth"}
}
],
"unit4":[
{
"chapter":{
"id":5,
"name":"water",
"id_above":2
}
},
{
"book":{"name":"sea"}
}
],
"unit1":[
{
"chapter":{
"id":2,
"name":"biology",
"id_above":2
}
},
{
"book":{"name":"science"}
}
]
};
根据'id_above value'(id_above和id应该相同,如果没有,我必须在正确的单位下移动),我想得到这个:
var hope={
"unit1":[
{
"chapter":{
"id":2,
"name":"biology",
"id_above":2
}
},
{
"book":{"name":"science"}
}
],
"sub":[
{
"unit3":[
{
"chapter":{
"id":4,
"name":"earth",
"id_above":2
}
},
{
"book":{"name":"earth"}
}
],
"unit4":[
{
"chapter":{
"id":5,
"name":"water",
"id_above":2
}
},
{
"book":{"name":"sea"}
}
]
}
]
}
我试过了:
for (var key in test){
if(test.hasOwnProperty(key)){
for (var i =0;i<test[key].length;i++){
if (test[key][i].chapter.id!=test[key][i].chapter.id_above){
for (var key2 in test){
if(test.hasOwnProperty(key2)){
for (var j =0;j<test[key2].length;j++){
var o=_.find(test[key2][j].chapter,{id:test[key][i].chapter.id_above})
console.log("o",o); //undefined
} }}} } } }
问题是我的变量o是'未定义的',我想在以下之后做:
test.sub=a;
你能帮帮我吗?感谢。
答案 0 :(得分:7)
您不能轻易将JavaScript对象用作订购的容器。相反,使用数组。
虽然JavaScript对象属性现在有一个订单(或者某些操作就像对象属性现在有一个订单,取决于你想看它的方式),但这是一个新事物(从ES2015开始)和这个顺序很难处理。值得注意的是,for-in
语句不支持属性顺序,Object.keys
也不支持。某些新操作(例如Object.getOwnPropertyNames
)确实支持新订单。
如果需要订单,请使用数组。