如果标题不清楚,请注意。这对我来说很难解释,因为当涉及到多个阵列时,我并不是那么好。
我有一个数组:[ [21, 1000], [21, 500], [18, 100], [18, 200] ]
现在我想得到这个结果数组:[ [21, 1500], [18, 300] ]
我该怎么做?
我尝试使用21和18作为数组键,但这样我无法在for
循环中使用数组.length
计数。我最终得到了总共4个数组,几乎让它运转起来。
修改
我想避免将21和18值用作数组键。
我还希望能够迭代生成的数组/对象,并使用21和18“键”来对页面进行进一步的更改。
感谢所有回复!
答案 0 :(得分:6)
如何创建对象:
var arr = [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
obj = {};
for (i=0; i<arr.length; i++) {
obj[arr[i][0]] = (obj[arr[i][0]] || 0) + arr[i][1];
}
// obj now equals {18: 300, 21: 1500}
// obj[21] equals 1500 etc
你可以用同样的方式创建一个数组:
var arr = [ [21, 1000], [21, 500], [18, 100], [18, 200] ],
arr2 = [];
for (i=0; i<arr.length; i++) {
arr2[arr[i][0]] = (arr2[arr[i][0]] || 0) + arr[i][1];
}
// giving you the array [18: 300, 21: 1500]
// where arr2[18] equals 300
答案 1 :(得分:2)
您肯定不需要任何jQuery
来获取您要求的结果数组:
var one = [21, 18];
var two = [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
var results = [];
for(var i in one) {
results[i] = 0;
for(var x in two)
if(two[x][0] === one[i])
results[i] = results[i] + two[x][1];
results[i] = [one[i], results[i]];
}
Fiddle 此处
答案 2 :(得分:0)
如果您的值不符合规定,您可以使用:
小提琴:
http://jsfiddle.net/acturbo/YWaja/
javasript:
var array1= [21, 18];
var array2 = [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
var result = [ [0,0], [0,0] ];
for (i=0;i<array1.length;i++){
result[0,i][0] = array1[i];
for (j=0;j<array2.length;j++){
var key = array2[i,j][0];
var val = array2[i,j][1];
if ( key == array1[i] ){
result[0,i][1] += val;
}
}
}
答案 3 :(得分:0)
这是另一种可能性,它使用Array.forEach,所以你需要有一个现代浏览器或使用其中一个“垫片”/“polyfill”。
的Javascript
var first = [21, 18],
second = [
[21, 1000],
[21, 500],
[18, 100],
[18, 200]
],
store = {};
result = [];
first.forEach(function (element) {
second.forEach(function (pair) {
var value;
if (pair[0] === element) {
value = store[element] || 0;
store[element] = value + pair[1];
}
});
if (typeof store[element] === "number") {
result.push([element, store[element]]);
}
});
console.log(result);
上
更新:这是一个基于更新问题的解决方案,它还使用Object.keys和Array.map来执行从对象到OP请求的数组格式的转换。
的Javascript
var first = [
[21, 1000],
[21, 500],
[18, 100],
[18, 200]
],
store = {};
result;
first.forEach(function (pair) {
store[pair[0]] = (store[pair[0]] || 0) + pair[1];
});
result = Object.keys(store).map(function (key) {
return [parseInt(key, 10), store[key]];
});
console.log(result);
上
答案 4 :(得分:0)
function aggregateResults(indexes, inputArray) {
var ret = [], tmp;
for (var i=0; i<indexes.length; i++) {
tmp = 0;
for (var j=0; j<inputArray.length; j++) {
tmp += inputArray[j][0] == indexes[i] ? inputArray[j][1] : 0;
}
ret.push([indexes[i], tmp])
}
return ret;
}