我有一个以下格式的数组。
var produce = [
{'supplierID':1,'produceID':1, 'name':'apple', 'qty': 10},
{'supplierID':1,'produceID':2, 'name':'carrot', 'qty': 10},
{'supplierID':1,'produceID':2, 'name':'bean', 'qty': 20},
{'supplierID':1,'produceID':1, 'name':'bananna', 'qty': 30},
{'supplierID':1,'produceID':1, 'name':'orange', 'qty': 65},
{'supplierID':2,'produceID':2, 'name':'pumpkin', 'qty': 120},
{'supplierID':2,'produceID':2, 'name':'cucumber', 'qty': 18},
{'supplierID':2,'produceID':1, 'name':'strawberry', 'qty': 130},
{'supplierID':2,'produceID':1, 'name':'mango', 'qty': 60},
{'supplierID':2,'produceID':1, 'name':'grapes', 'qty': 140}
];
//produceID 1 = fruit
//produceID 2 = veg
我想要这种格式。
{
'id': 1,
'fruit': [
{
'name': 'apple',
'qty': 10
},
{
'name': 'bananna',
'qty': 30
},
{
'name': 'orange',
'qty': 65
}
],
'veg': [
{
'name': 'carrot',
'qty': 10
},
{
'name': 'bean',
'qty': 20
},
]
},
{
'id': 2,
'fruit': [
{
'name': 'strawberry',
'qty': 130
},
{
'name': 'mango',
'qty': 60
},
{
'name': 'grapes',
'qty': 140
}
],
'veg': [
{
'name': 'pumpkin',
'qty': 120
},
{
'name': 'cucumber',
'qty': 18
},
]
}
这样我可以先按供应商对产品进行分组,然后按产品类型(水果/蔬菜)(使用角度js)进行分组
<div style="width:100%" ng-repeat="res in results">
<h2>Supplier - {{res.id}}</h2>
<h3>Fruit</h3>
<ul>
<li ng-repeat="f in res.fruit">{{f.name}}</li>
</ul>
<h3>Veg</h3>
<ul>
<li ng-repeat="v in res.veg">{{v.name}}</li>
</ul>
</div>
在这个代码中可以看到这方面的工作。 http://codepen.io/anon/pen/rVVJjg
我怎样才能做到这一点?
到目前为止,我发现我需要找到所有可以使用下面的供应商。
//get unique suppliers
var unique = {};
var distinct = [];
for( var i in produce ){
if( typeof(unique[produce[i].supplierID]) == "undefined"){
distinct.push(produce[i].supplierID);
}
unique[produce[i].supplierID] = 0;
}
console.log(distinct);
我也可以获得supplierID == 1的正确格式,如下所示,但不确定如何扩展它以处理多个供应商
var fruit = [];
var veg = [];
var res = [];
for (var i in produce) {
if (produce[i].supplierID == 1) {
if (produce[i].produceID == 1) {
fruit.push(produce[i]);
}
else {
veg.push(produce[i]);
}
}
}
res.push(fruit);
res.push(veg);
console.log(res);
我怎样才能实现这个目标?
答案 0 :(得分:1)
检查出来:
var produce = [
{'supplierID':1,'produceID':1, 'name':'apple', 'qty': 10},
{'supplierID':1,'produceID':2, 'name':'carrot', 'qty': 10},
{'supplierID':1,'produceID':2, 'name':'bean', 'qty': 20},
{'supplierID':1,'produceID':1, 'name':'bananna', 'qty': 30},
{'supplierID':1,'produceID':1, 'name':'orange', 'qty': 65},
{'supplierID':2,'produceID':2, 'name':'pumpkin', 'qty': 120},
{'supplierID':2,'produceID':2, 'name':'cucumber', 'qty': 18},
{'supplierID':2,'produceID':1, 'name':'strawberry', 'qty': 130},
{'supplierID':2,'produceID':1, 'name':'mango', 'qty': 60},
{'supplierID':2,'produceID':1, 'name':'grapes', 'qty': 140}
];
res = [];
suppliers = {};
for (var i in produce) {
product = produce[i];
var supplier = suppliers[product.supplierID]
if (!supplier) {
supplier = {id: product.supplierID, fruit: [], veg: []};
suppliers[product.supplierID] = supplier;
res.push(supplier);
}
if (product.produceID == 1) {
supplier.fruit.push({name: product.name, qty: product.qty});
} else if (product.produceID == 2) {
supplier.veg.push({name: product.name, qty: product.qty});
}
};
console.log(res);