我有这个Json。我想在AngularJs中使用,但我需要先修改它。我尝试使用foreach并重新排序对象,但最终结果并不好。
$scope.data = [
{
id: 1,
company: "MOVISTAR",
option: "PRECIO"
},
{
id: 2,
company: "MOVISTAR",
option: "CALIDAD"
},
{
id: 3,
company: "MOVISTAR",
option: "TECNOLOGIA"
},
{
id: 4,
company: "CLARO",
option: "PRECIO"
},
{
id: 5,
company: "CLARO",
option: "CALIDAD"
};
我需要这样的格式
$scope.datax = [
{
empresa: "MOVISTAR",
description:[{
id: 1,
opcionResp: "PRECIO"
},
{
id: 2,
opcionResp: "CALIDAD"
},
{
id: 3,
opcionResp: "TECNOLOGIA"
}]
},
{
empresa: "CLARO",
description:[{
id: 4,
opcionResp: "PRECIO"
},
{
id: 5,
opcionResp: "CALIDAD"
}]
}];
我对json和angular没有多少经验。请帮帮我。
非常感谢
答案 0 :(得分:2)
格式化json 可以通过调用
来完成angular.toJson(myObject)
要将$scope.data
转换为所需的结构,您可以迭代$scope.data
并构建一个新对象,如下所示:
在线演示 - https://plnkr.co/edit/TFW38xWKhMxmTdf11vbQ?p=preview
function fixData(data) {
var cache = {};
var results = [];
data.forEach(function(item) {
var values = cache[item.company];
if (!values) {
values = [];
results.push({
empresa: item.company,
description: values
});
}
cache[item.company] = values;
values.push({
id: item.id,
opcionResp: item.option
})
});
return results;
}
参见在线演示 - https://plnkr.co/edit/TFW38xWKhMxmTdf11vbQ?p=preview
答案 1 :(得分:1)
使用forEach非常简单:
var cache = {};
$scope.data.forEach(function(o){
(cache[o.company] = (cache[o.company] || [])).push({id:o.id, opcionResp:o.option})
})
$scope.datax = Object.keys(cache).map(function(key){
return {empresa:key,description:cache[key]}
})
答案 2 :(得分:0)
首先查找所有不同的公司,然后查看每个公司的原始数据并加载您的描述数组:
$scope.datax = []
for (var i in $scope.data) {
if (distinct.indexOf($scope.data[i].company) == -1) {
$scope.datax.push({
empresa: $scope.data[i].company,
description: []
})
}
}
for (var j in $scope.datax) {
for (var k in $scope.data) {
if ($scope.datax[j].empresa == $scope.data[k].company) {
$scope.datax[j].description.push({
id: $scope.data[k].id,
opcionResp: $scope.data[k].option
})
}
}
}