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

标签 javascript angularjs lodash

我有一个对象“测试”:

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/

相关文章:

javascript - 如何在页面刷新时中止ajax请求

javascript - 如果 Angular 属性为空,如何保留静态内容?

javascript - Angular,从指令标签读取属性

angularjs - 获取错误 - 找不到名称 'angular'

javascript - 使用 lodash 合并单个数组中的重复对象

javascript - Lodash 设置数组的每个元素

javascript - 使用 foreach 时重复表 id

javascript - 如何从 JavaScript 列表中删除新项目?

javascript - 如何在 Rails 中使用 gmaps

javascript - 在函数式 javascript 中翻译此代码(在 map 中聚合 2 个数组)