У меня есть массив в нижнем формате.javascript group уникальные элементы в массиве
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>
Работающими например это можно увидеть в этом 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);
Я также могу получить правильный формат для 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);
Как я могу добиться этого?
Как бы вы решили между фруктами и овощами? Например, томат - это плод :)] – mplungjan
Не используйте свои собственные циклы, используйте 'sort': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ сортировать – Adam