Как назначить несколько значений в массив и сложить их? - PullRequest
1 голос
/ 15 мая 2011

Я уже реализовал это, но поскольку я не знаком с оператором цикла FOR, я сделал это так, как показано ниже! Не могли бы вы помочь мне сократить этот код с помощью оператора цикла FOR и объяснить, как это работает! Спасибо

Вот мой код:

var inputs = new Array();
inputs["a"] = document.getElementById("a").value;
inputs["b"] = document.getElementById("b").value;
inputs["c"] = document.getElementById("c").value;
inputs["d"] = document.getElementById("d").value;
inputs["e"] = document.getElementById("e").value;

А потом я добавил их как:

var inputsvalue = inputs["a"] + inputs["b"] + inputs["c"] + inputs["d"] + inputs["e"];

Обратите внимание, что я добавляю значение каждого поля ввода и назначаю их в переменную!

Например, скажем, значения для полей ввода a, b, c, d, e следующие:

1, 2, 3, 4, 5

Итак, я хочу, чтобы они были назначены переменной «inputvalue», например:

var inputsvalue = "12345";

Вот почему я так их добавил! Так есть ли другой способ сделать это! В этом примере у меня только 5 полей ввода, но что, если бы было около 100 полей ввода!

Цель этого вопроса - узнать, как работает оператор цикла FOR в этом примере!

Заранее спасибо! :)

Ответы [ 4 ]

3 голосов
/ 15 мая 2011
// Too bad you can't use reduce.


inputs.reduce(function(a,b){
    return a.concat(b);
})

// If you could use reduce, you could use map, as well.

var sum= 'abcde'.split('').map(function(itm){
    return document.getElementById(itm).value;
}).reduce(function(a, b){
    return a.concat(b);
});
alert(sum)

/*    New browsers include map and reduce-
    you can add them to older browsers,
    but it might make your for in loops break,
    if you use for in loops to iterate arrays.
*/

if(!Array.prototype.map){
    Array.prototype.map= function(fun, scope){
        var T= this, L= T.length, A= Array(L), i= 0;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in T){
                    A[i]= fun.call(scope, T[i], i, T);
                }
                ++i;
            }
            return A;
        }
    }
}
if(!Array.prototype.reduce){
    Array.prototype.reduce= function(fun, temp, scope){
        var T= this, i= 0, len= T.length, temp;
        if(typeof fun=== 'function'){
            if(temp== undefined) temp= T[i++];
            while(i < len){
                if(i in T) temp= fun.call(scope, temp, T[i], i, T);
                i++;
            }
        }
        return temp;
    }
}
2 голосов
/ 15 мая 2011
var inputsValue = "";
for (var i = 0; i < inputs.length; i++){
    inputsValue += inputs[i];
}
1 голос
/ 15 мая 2011

Лучший способ сделать это - присвоить каждому входному идентификатору что-то вроде: id="element0" или, как правило: id="element<n>"

Таким образом, вы можете пойти:

var sum = 0;
for (i=0; i<max; i++){
    var elements = document.getElementById("element" + i);
    sum += Number(elements.value);
}
1 голос
/ 15 мая 2011

Вы можете использовать

  var elems = document.getElementsByTagName("input");
  var sum = '';

  for(i=0; i<elems.length; i++) {
     sum = sum + elems[i].value;
  }

   alert(sum); // to check your result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...