在我的角度应用程序中,我正在使用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
答案 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);
});
});