简体   繁体   English

Javascript多维数组:添加值

[英]Javascript Multidimensional Array: Add Values

So I have a multidimensional array like: 所以我有一个多维数组,如:

myArr = [["venue",2],["venue",16],["inning",2],["inning",4],["inning",32],["hithard", 4]]

I would like to add the similar values up. 我想添加类似的值。 So in the end I just have: 所以最后我只有:

"venue" = 18, "inning" = 38, and "hithard" = 4.

Can you give me an example of how to accomplish this? 您能举一个例子来说明这一点吗? Either with Javascript and/or jQuery 使用Javascript和/或jQuery

Thanks! 谢谢!

myArr = [["venue",2],["venue",16],["inning",2],["inning",4],["inning",32],["hithard", 4]];
values = {};
for (i=0;i<myArr.length;i++){
   if ("undefined" == typeof values[myArr[i][0]]) {values[myArr[i][0]] = 0;}
   values[myArr[i][0]] += myArr[i][1];
}
arr = [];
query_string = "";
for (i in values) {
    // if you want it in an array:
    arr.push('"' + i + '" = ' + values[i]);
    query_string += (query_string.length ? "&" : "") + i + "=" + values[i];
}
​console.log(arr);​

DEMO: http://jsfiddle.net/Ta97E/2/ 演示: http : //jsfiddle.net/Ta97E/2/

you can use values to create the query string 您可以使用值来创建查询字符串

I am not sure if you want an array or object. 我不确定是否要数组或对象。 If object, stop it is 1st pass and tmp in below code should return you the object as Object { venue=18, inning=38, hithard=4} . 如果是对象,则将其停止为第一次通过,以下代码中的tmp应该将对象返回为Object { venue=18, inning=38, hithard=4}

DEMO 演示

var tmp = {}, keys;
for (var i = 0; i < myArr.length; i++) {
    keys = myArr[i][0];
    tmp[keys] = (tmp.hasOwnProperty(keys))? 
              (tmp[keys] + myArr[i][1]):myArr[i][1];
} //tmp - will return you a Object { venue=18, inning=38, hithard=4}

var output = [];
for (keys in tmp) {
    output.push([keys, tmp[keys]]);
} //output will return you an array as [["venue", 18],["inning", 38],["hithard", 4]]     

Check this code: 检查此代码:

var final = {};
for (var i in myArr) {
    var item = myArr[i];
    final[item[0]] = (final[item[0]] || 0) + item[1];
}

console.log(final);​

DEMO: http://jsfiddle.net/UVJEb/ 演示: http : //jsfiddle.net/UVJEb/

Underscore solution: 下划线解决方案:

 sums = _.reduce(myArr, function (obj, item) { 
    obj[item[0]] = (obj[item[0]] || 0) + item[1]; 
    return obj; 
 }, {});

 // sums = {"venue":18,"inning":38,"hithard":4}

A little dirtier in jQuery jQuery有点脏

sums = {}

$.each(myArr, function (i, value) {
    sums[value[0]] = (sums[value[0]] || 0) + value[1];
});

Edit: add jQuery version 编辑:添加jQuery版本

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM