2013-08-07 2 views
0

Это связано с моим предыдущим вопросом, однако его немного отличается и это совершенно новый вопрос ... У меня есть массив, который после того, как некоторые хорошие PHP выглядит следующим образом:Начало неопределенными из яваскрипта массив массивов

var series = { 
    "001":{ 
     "game":"Portal 2", 
     "name":"Portal 2" 
    }, 
    "002":{ 
     "game":"Minecraft", 
     "name":"241" 
    }, 
    "003":{ 
     "game":"Minecraft", 
     "name":"HackMine" 
    }, 
    "004":{ 
     "game":"Mass Effect 3", 
     "name":"Mass Effect 3" 
    }, 
    "005":{ 
     "game":"League of Legends", 
     "name":"League of Legends" 
    }, 
    "006":{ 
     "game":"Half Life 2", 
     "name":"The Hidden: Source" 
    }, 
    "007":{ 
     "game":"Skyrim", 
     "name":"Modded Skyrim" 
    } 
} 

Этот бит заселена хорошо ... Теперь мой вопрос, когда эта функция вызывается, она всегда дает game и name Значение undefined

function seriesIdOnBlur() 
{  

    var id = parseInt(document.getElementById("series_id").value); 

    if (series[id] == null) 
    { 
     var message = "The Series ID you input was invalid"; 
    } 
    else 
    { 
     var seriesId = series[id]; 

     var game = seriesId['game']; 
     var name = seriesId['name']; 
     var message = "You've inputted the id for the game: " + game + " for the series: " + name; 
    } 

    document.getElementById("series_id_check").innerHTML = message; 
} 
+1

Те, кто не являются массивами. Это объект. – rlemon

ответ

6

Вы стреляете себе в ногу с теми, кто ведет 0 с: series['001'] - это не то же самое, что и series['1']. Либо разрежьте parseInt вызов (принуждая пользователю ввести '001'), падение ведущих 0s:

var series = { 
    "1":{ 
     "game":"Portal 2", 
     "name":"Portal 2" 
    }, 
    ... 
    "7":{ 
     "game":"Skyrim", 
     "name":"Modded Skyrim" 
    } 
} 

или использовать массив:

var series = [ 
    { 
     "game":"Portal 2", 
     "name":"Portal 2" 
    }, 
    ... 
    { 
     "game":"Skyrim", 
     "name":"Modded Skyrim" 
    } 
] 
+1

Обратите внимание, что массивы основаны на 0, поэтому, если вы переключитесь на пример массива, ваш первый элемент будет иметь индекс 0 вместо «001». Если вы хотите, чтобы он был в индексе 1, вы можете просто указать свои индексы и создать так называемый «разреженный» массив: 'series [1] = {« game »:« Portal »,« name »:« Portal »}; ' – seanmk

+0

быстрый плункер для варианта без' parseInt': http://plnkr.co/edit/tXlIUddSKkWeIOvcQUY2?p=preview – Florian

+0

Я использую 00 # намеренно, так как в итоге у меня будет более 10 серий, а я хотите, чтобы база данных выглядела аккуратно, я не ожидаю, что подойду выше 999, так что это нормально с нулями ... поэтому вы говорите, что нужно отказаться от parseInt – RedJax

1

Это:

series = { 
    "001":{ 
     "game":"Portal 2", 
     "name":"Portal 2" 
    }, 
    "002":{ 
     "game":"Minecraft", 
     "name":"241" 
    } ... }; 

является объектный литерал, поэтому у вас есть объект объектов, а не массив массивов, как вы заявили.

Вам понадобится массив объектов, чтобы ваш код для работы:

series = [ 
    { 
     "game":"Portal 2", 
     "name":"Portal 2" 
    }, 
    { 
     "game":"Minecraft", 
     "name":"241" 
    } ... ]; 
+0

Объект объектов в порядке, я думал, что они массивы – RedJax

Смежные вопросы