在对象javascript中更改数组的位置

时间:2016-12-28 11:59:07

标签: javascript angularjs lodash

我有一个对象'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;         
你能帮帮我吗?感谢。

1 个答案:

答案 0 :(得分:7)

您不能轻易将JavaScript对象用作订购的容器。相反,使用数组。

虽然JavaScript对象属性现在有一个订单(或者某些操作就像对象属性现在有一个订单,取决于你想看它的方式),但这是一个新事物(从ES2015开始)和这个顺序很难处理。值得注意的是,for-in语句支持属性顺序,Object.keys也不支持。某些新操作(例如Object.getOwnPropertyNames)确实支持新订单。

如果需要订单,请使用数组。

相关问题