【发布时间】:2015-05-01 14:00:30
【问题描述】:
我有一个以下格式的数组。
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
},
]
}
这样我就可以先按供应商对我的物品进行分组,然后按产品类型(水果/蔬菜)(使用 Angular 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>
可以在这个 codepen 中看到一个这样的工作示例。 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);
我还可以获得如下所示的供应商 ID == 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);
我怎样才能做到这一点?
【问题讨论】:
-
你会如何在水果和蔬菜之间做出选择?例如番茄是一种水果:)]
-
不要使用自己的循环,使用
sort:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript html arrays angularjs multidimensional-array