在javascript中为循环内的数组键添加值

时间:2012-01-11 20:49:53

标签: javascript arrays associative-array

总noob问题。在PHP中,我可以很容易地做到这一点:

foreach( $array1 as $key => $value ) {
    $array2[$key] += $value;
}

我无法弄清楚如何在javascript中执行此操作...我确信必须有办法。

编辑:我循环的并不重要,应该有一个通用的解决方案,用于在循环内动态创建关联数组或对象,并动态创建它的键/值对,并带有加总选项数字。也许下面的代码将有助于理解:

var vat = {};
InvoiceItems.each(function(item){

    vat_rate = item.get('vat_rate');
    vatsum = Number(roundNumber( 100 * item.get('vat'), 2 ) / 100, 2);
    vat[vat_rate] += vatsum;

});

问题是,这会产生如下对象:{"20": "undefined18.00","null":"0.00"}

因此存在“未定义”以及空的空键/值对。

2 个答案:

答案 0 :(得分:4)

JavaScript没有像PHP中定义的那样的for-each循环。如果您正在处理数组,则应使用for( ; ; )循环。否则,如果您正在处理对象,则最接近的是:

// Assume `object` to exist
var key, value; // Declare variables
for (key in object) {
    value = object[key];
}

删除了部分原始答案,因为它似乎与问题无关

代码,作为对评论的回应:

var dom_elements = document.querySelectorAll("input"); // Example, HTMLCollection
var array2 = {};   // Holds counters
for (var i=0; i<dom_elements.length; i++) {
    var element = dom_elements[i]; // Select element
    var key = element.name;        // Example: Elements are grouped by name
    var value = element.value;     // Example: value
    if (key in array2) {
        array2[key] += value;
    } else {                  // If the key does not exist, create one:
        array2[key] = value;
    }
}

更新2:基于更新的问题

vat[vat_rate] += vatsum;替换为:

if (vat_rate in vat) {
    vat[vat_rate] += vatsum;
} else {
    vat[vat_rate] = vatsum;
}

答案 1 :(得分:0)

我认为你要做的是:

var array2 = [4, 5, 6];
var array1 = [1, 2, 3];
for (var key in array1) {
    array2[key] += array1[key];
}

这会将array1中的每个项目添加到array2中的相应项目,并将array2中的项目替换为结果,这实际上就是您在PHP代码中所做的事情。