Доступ к счетчику в имени переменной в Javascript (код внутри) - PullRequest
1 голос
/ 02 сентября 2011

Я хочу сделать что-то очень похожее на следующий код PHP, но в javascipt:

for ($weenumber = 1; $weenumber <= 30; $weenumber++)
{ 
    $weenumber = str_pad($weenumber, 2, "0", STR_PAD_LEFT);
    echo $_POST["entry{$weenumber}_cash"];
} 

По сути, доступ к номеру цикла, дополненному завершающим 0, если меньше 10, но я не знаю синтаксиса в JS, чтобы сделать это: (

Извините за вопрос стиля нуб

Ответы [ 7 ]

2 голосов
/ 02 сентября 2011

Я думаю, что вы имеете в виду начальный ноль, а не конечный ноль ...

Вы можете, например, использовать условный оператор:

(n < 10 ? '0' : '') + n

Вы также можете реализовать общее назначениеfunction:

function padLeft(str, len, ch) {
  while (str.length < len) str = ch + str;
  return str;
}

Для доступа к свойству объекта по имени в Javascript вы используете скобки.Пример:

var value = obj['entry' + (n < 10 ? '0' : '') + n + '_cash'];

Если n содержит 4, это будет то же самое, что и obj.entry04_cash.

0 голосов
/ 02 сентября 2011
var someArray = [/*...*/];
for (var i= 1;i<= 30;i++)
    { 
        var weenumber = i+"";
        for(var j=weenumber.length;j<2;j++)
            weenumber = "0" + weenumber;
        var key = "entry" + weenumber + "_cash";
        document.write(someArray[key]);
    }
0 голосов
/ 02 сентября 2011

Вот функция, которую вы можете использовать для добавления нуля:

function zeroPad(nr,base){
        var  len = (String(base).length - String(nr).length)+1;
        return len > 0? new Array(len).join('0')+nr : nr;
}
//usage
alert(zeroPad(3,10)); //=> 03

или расширить прототип Number

Number.prototype.zeroPad = Number.prototype.zeroPad ||
    function(base){
            var nr = this, len = (String(base).length - String(nr).length)+1;
            return len > 0? new Array(len).join('0')+nr : nr;
    };
//usage
var num = 1;
alert(num.zeroPad(100)); //=> 001

Теперь для части имени переменной: если это глобальная переменная (не рекомендуется) эта переменная является свойством global object, в браузере это window.Вы можете получить переменную по ее динамическому имени, используя эквивалент: window['myvariable'+myJustResolvedNumericValue].Внутри объекта (экземпляра) вы можете использовать одинаковые скобочные обозначения: myObject['myvariable'+myJustResolvedNumericValue].

Используя эту информацию, в javascript ваша функция может выглядеть следующим образом:

for (var weenumber = 1; weenumber <= 30; weenumber++)
{ 
    // execute something using the variable that uses the counter in the
    // variable name as parameter
    executeSomeFunction(window['entry'+weenumber.padLeft(10) + '_cash']);
} 
0 голосов
/ 02 сентября 2011
for(var i=0; i<30; i++)
{
   var index = i;
   if(i<10) index = "0" + index
   var elem = document.getElementById("entry"+index);
}
0 голосов
/ 02 сентября 2011
for (weenumber = 1; weenumber <= 30; weenumber++) { 
    weenumber = str_pad(weenumber, 2, "0", STR_PAD_LEFT);
} 

Для функции str_pad () вы можете использовать библиотеку PHPJS: http://phpjs.org/functions/str_pad:525

Эта библиотека также облегчит вам переход с php на javascript. Проверьте это.

0 голосов
/ 02 сентября 2011

Это код, который вы должны использовать:

for(var i=0; i<30; i++){
    document.writeln(i<10 ? "0"+i : i);
}

изменить document.writeln () на любую функцию, с которой вы хотите обработать данные

0 голосов
/ 02 сентября 2011

Независимо от того, существует ли специальная функция для этого, если вы знаете, как использовать предложение if, и знаете, как выполнять конкатенацию строк (используя оператор +, если вы этого не сделали), то вы должна быть в состоянии легко свернуть вашу собственную версию str_pad вручную (которая работает для чисел ниже 100).

Подумайте о случаях (есть только два) и о том, что вам нужно вывести в любом случае.

...