Добавить значения для ключа массива внутри цикла в JavaScript - PullRequest
1 голос
/ 12 января 2012

Всего вопросов о нубах.В 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 ]

4 голосов
/ 12 января 2012

В JavaScript нет такого цикла for-each, как определено в PHP. Если вы имеете дело с массивами, вы должны использовать цикл 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;
}
0 голосов
/ 12 января 2012

Я думаю, что вы пытаетесь сделать следующее:

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

Это добавит каждый элемент в массиве 1 к соответствующему элементу в массиве 2 и заменит элемент в массиве 2 с результатом, который по сути то, чтовы делаете в своем коде PHP.

...