получение значения многомерного массива javascript в IE - PullRequest
1 голос
/ 23 ноября 2011

У меня есть этот массив (я знаю, технически нет такого понятия, как многомерный массив в javascript) или «объект». Я хочу получить значение -888 примерно так:

    var thisPage = 1;

    var pagePos = {
        0: {
            left: '0',
            url: 'home',
        },
        1: {
            left: '-888',
            url: 'what_we_offer',
        },
        2: {
            left: '-1776',
            url: 'clients',
        },
        3: {
            left: '-2664',
            url: 'contact_us',
        }
    };

alert(pagePos[thisPage].left);

Отлично работает в Firefox, но не в IE. Почему?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 ноября 2011

Что, если вы превратите его в массив объектов (так как вы обращаетесь к нему):

var thisPage = 1;

var pagePos = [
    {
        left: '0',
        url: 'home'
    },
    {
        left: '-888',
        url: 'what_we_offer'
    },
    {
        left: '-1776',
        url: 'clients'
    },
    {
        left: '-2664',
        url: 'contact_us'
    }
];

alert(pagePos[thisPage].left);

Также ... уберите лишние запятые после свойств url. С некоторыми браузерами все в порядке, с некоторыми нет.

2 голосов
/ 23 ноября 2011

Это из-за запятых после значений атрибутов url. Вы не можете иметь запятую после последнего значения в JSON. Правильный синтаксис:

var pagePos = {
    0: {
        left: '0',
        url: 'home'
    },
    1: {
        left: '-888',
        url: 'what_we_offer'
    },
    2: {
        left: '-1776',
        url: 'clients'
    },
    3: {
        left: '-2664',
        url: 'contact_us'
    }
};
0 голосов
/ 23 ноября 2011

Это довольно необычный способ собрать массив ... Я удивлен, что он работает в любом браузере!Попробуйте определить pagePos как этот intead:

var pagePos = [ // note: bracket!
        {
            left: '0',
            url: 'home',
        },
        {
            left: '-888',
            url: 'what_we_offer',
        },
        {
            left: '-1776',
            url: 'clients',
        },
        {
            left: '-2664',
            url: 'contact_us',
        }
    ];
0 голосов
/ 23 ноября 2011

Я вижу пару причин, по которым IE может иметь проблемы с этим (это IE, cmon '). Попробуйте изменить природу вашего массива на простой массив объектов. Таким образом, они будут нумерованы в порядке их инициализации.

var pagePos = [
    {
        left: '0',
        url: 'home',
    },
    {
        left: '-888',
        url: 'what_we_offer',
    },
    {
        left: '-1776',
        url: 'clients',
    },
    {
        left: '-2664',
        url: 'contact_us',
    }
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...