Javascript, помещающий значения в двумерный массив - PullRequest
1 голос
/ 05 августа 2011

Есть ли лучший способ создать двумерный массив в javascript, чем этот?

var divcookies = new Array();
divcookies[0] = new Array(2);
divcookies[0][0] = name;
divcookies[0][1] = value;

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

(name1, value1, name2, value2, name3, value3)

Вместо этого я получаю это.

(name1, value2, ,name2, value2, name3, value3)

Я на самом деле не знаю, когда добавляются эти дополнительные неверные данные, потому что, если я предупреждаю во время цикла, который заполняет массив, кажется, что он только перебирает 3 раза, чтобы получить три пары ожидаемых значений.

Так что я ищу другой способ получить двумерный массив.

function get_cookies_array() {

    var divcookies = new Array();

    if (document.cookie && document.cookie != '') {
        var split = document.cookie.split(';');
        for (var i = 0; i < split.length; i++) {
            var name_value = split[i].split("=");
            name_value[0] = name_value[0].replace(/^ /, '');
            if ( name_value[0].search("compage") != -1 ) {
               alert (divname+" "+ divarray);
               divcookies[i] = new Array(2);
               divcookies[i][0] = decodeURIComponent(name_value[0]);
               divcookies[i][1] = decodeURIComponent(name_value[1]);
            }
        }
    }

    alert (divcookies);

    return divcookies;

}

jsBin http://jsbin.com/iwuqab

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Рекомендуемый метод создания массивов в JS - НЕ использовать метод 'new'.Вместо этого выполните:

var divcookies = [];
divcookies[0] = [];
divcookies[0][0] = name;
divcookies[0][1] = value;

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

1 голос
/ 06 августа 2011

Ваш 2-мерный массив настроен правильно (ну, [] предпочтительнее, чем new Array()). Фактическая проблема только с отображением вашего массива с использованием alert(divcookies). Здесь divcookies преобразуется в строку, используя предопределенный метод toString(). Этот метод создает список элементов массива, разделенных запятыми, от первого до последнего элемента. Если некоторые элементы между ними не заданы, выводится пустая строка. В вашем случае вы не присваиваете тем индексам i из divcookies, для которых name_value[0].search("compage") == -1. Это пробелы ,, в списке предупреждений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...