Использование переменной для доступа к индексу массива в JavaScript - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь использовать переменную для доступа к значению массива, но я получаю неопределенную ошибку.

var ordernum = 54;
keys[ordernum][ "keys" ];

Uncaught TypeError: Cannot read property 'keys' of undefined

Если я делаю keys["54"][ "keys" ];, это работает просто отлично.Однако мне нужно использовать переменную, так как этот код находится в цикле for.

Как использовать переменную для получения того же результата?

Полный код:

    var customers = <?php if ( isset($customers) ) { echo json_encode($customers); } ?>;
    var keys = <?php if ( isset($keystable) ) { echo json_encode($keystable); } ?>;

for ( var i = 0; i < customers.length; i++ ) {
            var ordernum = customers[ i ][ "order" ];
            table += '<tr bgcolor="#ffffff">';
            table += '<td>' + customers[ i ][ "email" ] + '</td>';
            table += '<td>' + customers[ i ][ "org" ] + '</td>';
            table += '<td style="width:450px;">' + customers[ i ][ "notes" ] + '</td>';
            table += '<td>' + keys[ordernum.toString()][ "keys" ] + '</td>';
            table += '</tr>';
        }

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Вероятно, это будет работать для вас:

var ordernum = 54;
keys[ordernum+""][ "keys" ];
0 голосов
/ 26 мая 2018

То, что вы говорите, невозможно (ну, не технически невозможно, но это потребует некоторой магии js, основанной на прокси, которую, я уверен, в вашем случае нет).

Возможно, ваши ключи не "54", а " 54", "054" или что-то подобное.

Проверьте, какие ключи действительно есть у чего-то вроде

console.log(JSON.stringify(Object.keys(keys)));

Еще одна очень частая ошибкаявляется то, что вы используете асинхронный сбор данных (AJAX), и ваш цикл выполняется слишком рано (вам нужно поместить свою обработку в обратный вызов, и вместо этого вы запускаете ее сразу после вызова AJAX).

0 голосов
/ 26 мая 2018

Если ключи ["54"] ["ключи"] работают, это означает, что первый ключ является строкой.Затем вам нужно сделать переменную строкой.

var ordernum = "54";
keys[ordernum][ "keys" ];

или

var ordernum = 54;
keys[ordernum.toString()][ "keys" ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...