2016-02-01 3 views
0

У меня есть следующий JS, который читается из внешнего файла JSON (см. Ниже) и проходит через все возвращенные школы, а затем сравнивает почтовый индекс, переданный через форму, в свойство zip каждого объекта JSON, используя оператор if.JSON Результат Сортировка

Я ожидал бы, что совпадения будут возвращены в том порядке, в котором они встречаются в файле JSON, но когда я ищу zip 76248, я получаю нижний вывод в консоли.

$("#searchSubmit").click(function (evt) { 
 
     evt.preventDefault(); 
 
     var searchTerm = $("#searchTerm").val(); 
 

 
     if (searchTerm == '' || searchTerm == null) { 
 
     alert ("Please enter a zip code"); 
 
     $("#searchTerm").focus(); 
 
     return; 
 
     } 
 

 
     if (searchTerm.substring(0, 1) != 7) { 
 
     alert("Please enter a Keller ISD Zip Code"); 
 
      $("#searchTerm").focus(); 
 
      return; 
 
     } 
 
      
 
     grabSchools(searchTerm); 
 

 
    });

function grabSchools(zip) { 
 
     var output = ""; 
 

 
     jQuery.each(schools, function (i, v) { 
 

 
       if (v.zip == zip) { 
 
       
 
       output += v.id + "\n"; 
 

 
       } 
 

 
     }); 
 

 
     console.log(output); 
 

 
    }

var schools = { 
 

 
    "129": 
 
     { 
 
     "id":"129", 
 
     "name": "Ridgeview Elementary", 
 
     "address": "1601 Marshall Ridge Pkwy.", 
 
     "zip": "76248", 
 
     "phone": "817-744-6600", 
 
     "web": "", 
 
     "map": "", 
 
     "intermediate": "123|104", 
 
     "middle" : "045", 
 
     "high": "001|005" 
 
     }, 
 
     "104": 
 
     { 
 
     "id":"104", 
 
     "name": "Bear Creek Intermediate", 
 
     "address": "801 Bear Creek Pkwy.", 
 
     "zip": "76248", 
 
     "phone": "817-744-3500", 
 
     "web": "", 
 
     "map": "", 
 
     "middle" : "041", 
 
     "high": "001" 
 
     }, 
 
     "123": 
 
     { 
 
     "id":"123", 
 
     "name": "Trinity Meadows Intermediate", 
 
     "address": "3500 Keller-Hicks Road", 
 
     "zip": "76244", 
 
     "phone": "817-744-4300", 
 
     "web": "", 
 
     "map": "", 
 
     "middle" : "045", 
 
     "high": "005" 
 
     }, 
 
     "042": 
 
     { 
 
     "id":"042", 
 
     "name": "Fossil Hill Middle", 
 
     "address": "3821 Staghorn Circle S.", 
 
     "zip": "76137", 
 
     "phone": "817-744-3050", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "002" 
 
     }, 
 

 
     "043": 
 
     { 
 
     "id":"043", 
 
     "name": "Hillwood Middle", 
 
     "address": "8250 Parkwood Hill Blvd.", 
 
     "zip": "76137", 
 
     "phone": "817-744-3350", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "002|004" 
 
     }, 
 

 
     "044": 
 
     { 
 
     "id":"044", 
 
     "name": "Indian Springs Middle", 
 
     "address": "305 Bursey Road", 
 
     "zip": "76248", 
 
     "phone": "817-744-3200", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "001|004" 
 
     }, 
 

 
     "041": 
 
     { 
 
     "id":"041", 
 
     "name": "Keller Middle", 
 
     "address": "300 College Avenue", 
 
     "zip": "76248", 
 
     "phone": "817-744-2900", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "001" 
 
     }, 
 

 
     "046": 
 
     { 
 
     "id":"046", 
 
     "name": "Timberview Middle", 
 
     "address": "10300 Old Denton Road", 
 
     "zip": "76244", 
 
     "phone": "817-744-2600", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "005" 
 
     }, 
 

 
     "045": 
 
     { 
 
     "id":"045", 
 
     "name": "Trinity Springs Middle", 
 
     "address": "3550 Keller-Hicks Road", 
 
     "zip": "76244", 
 
     "phone": "817-744-3500", 
 
     "web": "", 
 
     "map": "", 
 
     "high": "005" 
 
     }, 
 
    
 
    "004":  
 
     { 
 
     "id":"004", 
 
     "name": "Central High", 
 
     "address": "9450 Ray White", 
 
     "zip": "76244", 
 
     "phone": "817-744-2000", 
 
     "web": "", 
 
     "map": "" 
 
     }, 
 
    
 
    "002": 
 
     { 
 
     "id":"002", 
 
     "name": "Fossil Ridge", 
 
     "address": "4101 Thompson Road", 
 
     "zip": "76244", 
 
     "phone": "817-744-1700", 
 
     "web": "", 
 
     "map": "" 
 
     }, 
 

 
     "001": 
 
     { 
 
     "id":"001", 
 
     "name": "Keller High", 
 
     "address": "601 N. Pate-Orr Road", 
 
     "zip": "76248", 
 
     "phone": "817-744-1400", 
 
     "web": "", 
 
     "map": "" 
 
     }, 
 

 
     "005": 
 
     { 
 
     "id":"005", 
 
     "name": "Timber Creek High", 
 
     "address": "12350 Timberland Blvd.", 
 
     "zip": "76244", 
 
     "phone": "817-744-2300", 
 
     "web": "", 
 
     "map": "" 
 
     }, 
 

 
    
 
     
 

 

 
     
 
    
 
};

104 
 
129 
 
044 
 
041 
 
001

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

Вопрос: Почему нет первого возвращенного идентификатора?

+0

В каком браузере вы работаете? Дело в том, что в Javascript нет гарантии, что свойства объекта считываются в том порядке, в котором они помещаются или встречаются при разборе JSON. Большинство браузеров сохраняют заказ свойства (или ключа), но, например, некоторые версии Chrome не делают, – Antares42

+0

Я работал в Chrome, но я проверил его в IE11 и Firefox, и результат был таким же. –

+0

Да, когда я запускаю '' Object.keys (school) '' (или просто набираю «школы» в Firebug), я получаю ключи/свойства как 104, 123, 129, ... Я предполагаю, что браузеры делают внутреннее обращение и индексирование, оптимизированные для получения значений по ключу. Это, к сожалению, так, как есть, и ни jQuery, ни какая-либо другая библиотека не могут его изменить. – Antares42

ответ

0

Короткий ответ: Javascript не гарантирует заказ ключей/свойств в своих объектах.

See here.

0

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

Когда я пронумеровал значения индекса в порядке возрастания, он отсортировался так, как я хотел.

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