我有以下js数组:
for(var j = 0; j < array.length; j++){
arr.push([array[j][0],array[j][1],array[j][2]]);
}
它转化为:
数字,类型,数量
[[12345, "product", "10"],[12345, "product", "15"],[1234567, "other", "10"]]
我一直在尝试过滤唯一的产品编号 array [j] [0] 并将数量数组[j] [2] 相加如果有多个,我可以通过执行以下操作来执行唯一过滤器:
for(var o = 0; o < arr.length; o++){
if (!n[arr[o][1]]){
n[arr[o][1]] = true
r.push(arr[o]);
}
}
我希望你的帮助可以解决这个问题。我期望实现的目标是这样的:
[[12345, "product", "25"],[1234567, "other", "10"]]
由于重复了产品12345,我只需要显示一次,并将其他产品的数量与相同的产品编号相加。
答案 0 :(得分:1)
var productIndex = {};
var result = [];
for (var i = 0; i < arr.length; i++) {
var productId = arr[i][0];
if (productIndex[productId] === undefined) {
productIndex[productId] = result.length;
result.push(arr[i]);
} else {
var index = productIndex[productId];
result[index][2] = String(+result[index][2] + +arr[i][2]);
}
}
答案 1 :(得分:0)
我相信有更好的方法。但我只是将其更改为一个对象,添加它们并将其更改回一个数组。你走了:
https://jsfiddle.net/ct6to1Lv/
var a = [[12345, "product", "10"],[12345, "product", "15"],[1234567, "other", "10"]];
var b = {};
var c = [];
for(var i = 0; i < a.length; i++) {
if(!b.hasOwnProperty(a[i][0])) {
b[a[i][0]] = {};
b[a[i][0]]['qty'] = 0;
}
b[a[i][0]]['id'] = a[i][0];
b[a[i][0]]['name'] = a[i][1];
b[a[i][0]]['qty'] += parseInt(a[i][2]);
}
for(key in b) {
c[c.length] = [b[key]['id'], b[key]['name'], b[key]['qty']];
}
$(function(){
$('#console').append(a.toString()+'<br />');
$('#console').append(JSON.stringify(b)+'<br />');
$('#console').append(c.toString());
});
答案 2 :(得分:0)
var arr = [[12345, "product", "10"],[12345, "product", "15"],[1234567, "other", "10"]];
var obj = {};
arr.forEach(function(e){
var t = e[0];
if(obj[t]) {
obj[t][2] += +e[2];
} else {
t = [];
t[0] = e[0];
t[1] = e[1];
t[2] = +e[2];
obj[e[0]] = t;
}
});
var res = [];
Object.keys(obj).forEach(function(k) {
res.push(obj[k]);
});
console.log(res);
结果:
[ [ 12345, 'product', 25 ], [ 1234567, 'other', 10 ] ]
答案 3 :(得分:0)
[$mobx: Object]
0: (...)
1: (...)
2: (...)
3: (...)
4: (...)
5: (...)
6: (...)
7: (...)
8: (...)
9: (...)
10: (...)
11: (...)
12: (...)
13: (...)
14: (...)
15: (...)
16: (...)
17: (...)
...
999: (...)
方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。
参见 Array.prototype.reduce() 和 Array.prototype.sort()
reduce()
答案 4 :(得分:0)
为了完成可能性,这里是一个临时对象的解决方案,隐藏在this
中。
var data = [[12345, "product", "10"], [12345, "product", "15"], [1234567, "other", "10"]],
result = function (data) {
var r = [];
data.forEach(function (a) {
if (!this[a[0]]) {
this[a[0]] = [a[0], a[1], 0];
r.push(this[a[0]]);
}
this[a[0]][2] += +a[2];
}, {});
return r;
}(data);
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;