0

我有一系列具有如下值的项目: -

 item[0] A    quantity[0]       10       Category[0]  Alpha    itemtype[0]   Groceries
 item[1] A    quantity[1]       15       Category[1]  Beta     itemtype[1]   Toiletries
 item[2] B    quantity[2]       5        Category[2]  Alpha    itemtype[2]   Stationery

使用 Javascript,我想合并相同项目的数量,而且如果相同项目很少,它应该只显示类别为 Alpha 的项目类型。新数组的结果应该是:

 item[0] A       quantity[0] 25      category[0] Alpha      itemtype[0]Groceries
 item[1] B       quantity[1] 5       category[1] Alpha      itemtype[1]Stationery
4

3 回答 3

0

我认为使用对象数组更容易

var items = [
    {item: 'A', quantity: 10, category: 'Alpha', itemtype: 'Groceries'},
    {item: 'A', quantity: 15, category: 'Beta', itemtype: 'Toiletries'},
    {item: 'B', quantity: 5, category: 'Alpha', itemtype: 'Stationery'}
]

然后过滤它

var result = [];
for(var i=0; i<items.length; i++){
    if (items[i].category == "Alpha"){
        result.push(items[i]);
    }
}

result是你的新阵列。

于 2013-10-09T12:37:02.287 回答
0

尝试类似的东西

// create JS-objects to collect the values ...
var i,nam,quant={},cat={},ityp={};
for (i=0; i<item.length; i++) {
  nam=item[i];
  // initialise the summation variable to zero first:
  if (typeof quant[nam]=='undefined') quant[nam]=0;
  // do the summation
  quant[nam]+=quantity[i];

  // initialise the string variables too:
  if (typeof ityp[nam]=='undefined') ityp[nam]='';
  if (typeof  cat[nam]=='undefined')  cat[nam]='';
  if (category[i]=='Alpha') { // set the variables, if ...
    ityp[nam]=itemtype[i];
    cat[nam]=category[i];    
  }
}
// destroy original arrays ...
category=[];item=[];quantity=[];itemtype=[];
// ... and build them up again:
for (i in quant) {
  item.push(i);
  quantity.push(quant[i]);
  category.push(cat[i]);
  itemtype.push(ityp[i]);  
}

这种方法不依赖于数组中元素的任何给定顺序。

见这里演示:http: //jsfiddle.net/CP2cQ/

于 2013-10-09T12:11:10.110 回答
0
for (var i = 0, l = category.length; i < l; i++) {
    if (category[i + 1] !== category[i]) {
        category.splice(i + 1, 1);
        item.splice(i + 1, 1);
        quantity[i] = String(+quantity[i] + +quantity[i + 1]);
        quantity.splice(i + 1, 1);
        itemtype.splice(i + 1, 1);
    }
    i--; l--;
}

小提琴

您还可以将单独的数组添加到包装器中,并使用forEach(IE9 及以上 IIRC)循环:

var arrays = [ category, item , quantity, itemtype ];

for (var i = 0, l = category.length; i < l; i++) {
    if (category[i + 1] !== category[i]) {
        quantity[i] = String(+quantity[i] + +quantity[i + 1]);
        arrays.forEach(function (el) { return el.splice(i + 1, 1); });
    }
    i--; l--;
}

小提琴

于 2013-10-09T12:19:08.627 回答