我有一个对象“测试”:
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值'(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;
你能帮我一下吗?谢谢。
最佳答案
您不能轻松地将 JavaScript 对象用作有序容器。相反,请使用数组。
虽然 JavaScript 对象属性现在确实有一个顺序(或者某些操作的行为就像对象属性现在有一个顺序,这取决于您想要如何看待它),但这是一个新事物(从 ES2015 开始)并且该命令很难执行。值得注意的是,for-in
语句不支持属性顺序,Object.keys
也不支持。一些新操作(例如 Object.getOwnPropertyNames
)确实支持新顺序。
当您想要订单时,请使用数组。
关于javascript - 更改对象 javascript 中数组的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41361674/