如何动态检查字段并创建数组?

时间:2015-03-22 07:09:41

标签: javascript arrays angularjs html5

在我的角度应用程序中,我正在使用pivot.js构建一个数据透视表,这可以很好地工作。

我需要从弹性搜索加载所有索引,当用户更改索引时,它必须将相应的数据加载到数据透视表。这是我用以下代码实现的。

现在我的问题是每当用户更改索引时,我进行服务调用以获取表的字段和表的完整数据。我需要为数据透视表动态构建一个数组。

这是一个示例,我有一个产品表,其中包含相应的字段和数据。

我需要动态映射字段并获取要绑定的数据。

   //assume these are the fields of a table i get from the service
   $scope.ProductFields = ['Name','Code','UOM'];
   //assume this is the data i get from the rest service
   $scope.ProductData = [
    {
        Name: "ProductA",
          Code: "#f00",
          UOM:"Units"
    },
    {
          Name: "ProductB",
          Code: "#0f0",
          UOM:"Units"
    }
    // how can i build a dynamic object of product from the above data with the fields
    //something like this
    //for(dataItem in ProductData)
    //  {
    //  for(x in ProductFields)
    //  {
    //      $scope.datatobeBuild.push({fields[x]:data[dataItem]});
    //  }
    // }
    //    $scope.products=$scope.datatobeBuild;

]; 

以下是完整的Code

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套循环构建对象:

$scope.products = [];
for (var i = 0; i < $scope.ProductData.length; i++) {
  var data = $scope.ProductData[i],
      product = {};
  for (var j = 0; j < $scope.ProductFields.length; j++) {
    var field = $scope.ProductFields[j];
    product[field] = data[field];
  }
  $scope.products.push(product);
}

$scope.products = [];
$scope.ProductData.forEach(function(data) {
  var product = {};
  $scope.ProductFields.forEach(function(field) {
    product[field] = data[field];
  });
  $scope.product.push(product);
});

答案 1 :(得分:0)

您需要使用动态键构造对象。你可以使用bracket notation

这样做
$scope.ProductData.forEach(function(data) {
    $scope.ProductFields.forEach(function(field) {
        var dataItem = {};
        dataItem[field] = data;
        $scope.datatobeBuild.push(dataItem);
    });
});