我的项目数组的值如下: -
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
答案 0 :(得分: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/
答案 1 :(得分: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--;
}
答案 2 :(得分: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
是您的新阵列。