从对象内到每个键表单对象

时间:2016-11-16 06:47:14

标签: javascript angularjs

所以,我有一个如下对象:

custom_fields:{
21:{
    edit:true
    required:true
    show:true
   }
}

我的角度控制器中存储了哪些内容:$scope.page.custom_fields 在这个对象中,我有另一个,像这样:

custom_fields:{
    21:{
        edit:true
        required:true
        show:true
       }
    22:{
        edit:true
        required:true
        show:true
       }
    data:[
         0:{
            display_name:"Text"
            id:21
            name:"Text"
            value:[
                   0:{"TextHere"}
                  ]
        }
         1:{
            display_name:"Text"
            id:22
            name:"Text"
            value:[
                   0:{"TextHere"}
                  ]
        }
    ]
}

这个存储方式如下:$scope.page.custom_fields.data = response.data.custom_fields; 如您所见,第一个是对象的对象,而第二个是对象的数组。我不知道他们为什么会这样结束,但是我需要将数据中的第一个键分配给自定义字段中的第一个键,所以它们最终看起来像这样:

custom_fields:{
    21:{
        edit:true
        required:true
        show:true
        display_name:"Text2"
        id:21
        name:"Text"
        value:[
               0:{"TextHere"}
              ]
       }
}

我应该在角度控制器中执行此操作。正如您所看到的,数据中的每个ID都与custom_fields中的键相对应(在本例中为21:{}data[0:{id:21}]) 但它们是由一个foreach在php中按顺序排列的,所以也没有必要在js中制作一个foreach,我只需按顺序分配从custom_fields.datacustom_fields的每个键的每个键。 但是我怎么能这样做呢?

4 个答案:

答案 0 :(得分:0)

data[0:{id:21}]

不,这是不可能的。 请参阅链接

numeric-type-as-an-object-key

答案 1 :(得分:0)

稍后在代码中使用$ scope.page.custom_fields.21将非常困难。因此最好将它用作数组格式而不是对象。以下代码将帮助您在自定义字段的对象数组中解析它。

angular.forEach($scope.custom_fields.data, function(value, idx){ // may be $scope.custom_fields.custom_fields.data as per your code. Please correct accordingly.
   if($scope.custom_fields[value.id]){
       angular.merge($scope.custom_fields.data[idx], $scope.custom_fields[value.id]);
       delete($scope.custom_fields[value.id]);
   } 
});
$scope.custom_fields = $scope.custom_fields.data;
console.log($scope.custom_fields);

答案 2 :(得分:0)

<nav>
  <ol>
    <li><a href="reiseziele.html">Reiseziele</a></li>
    <li><a href="kontakt.html">Kontakt</a>
      <ol>
        <li><a href="kontakt_mail.html">E-Mail</a></li>
        <li><a href="kontakt_formular.html">Formular</a></li>
      </ol>
    </li>
  </ol>
</nav>

答案 3 :(得分:-1)

正如我在评论中所说,我认为您需要一个循环来对每个自定义字段进行设置

var i = 0;
for (var key in custom_fields) {
  if (custom_fields.hasOwnProperty(key)) {
     // only if you are sure that data is ordered, else must be filter data by custom_fields[key].id
     custom_fields[key].display_name = data[i].display_name;
     custom_fields[key].name = data[i].name;
     custom_fields[key].value = data[i].value;
     i++;
  }
 }

我希望这会对你有所帮助