2016-03-30 18 views
1

Anahtardan ziyade değere göre alfabetik olarak sıralanmış bir JSON nesnesine sahibim. Ancak, nesneyi $select formuna enjekte etmek için _.each kullandığımda, nesne anahtarı temel alarak başvurur. Bunu nasıl önleyebileceğimi bilen var mı? JSON JavaScript sözdizimine benzer bir veri dize hali olduğu içinUnderscore _.each işlevi - anahtar değere göre sıralama

var $select = $("#tunnel-list"); 
     var tpl = _.template('<option value="<%= id %>"><%= name %></option>'); 
     _.each(tunnels, function(name, index) { 
      console.log(name, index) 
      $select.append(tpl({id: index, name: name})); 
     }); 

cevap

1

Sen, bir JavaScript Nesne bahsediyor olabilir.

Nesneniz varsa, öğelerin sırası garanti edilemez. Veri yapınızı değiştirmenizi gerektiren bir dizi kullanarak onu sadece sıralayabilirsiniz.

aşağıdaki linki yanı sorunuza yanıt Umut: Does JavaScript Guarantee Object Property Order?

0

bir javascript nesne, o (bir dizi farklı olarak) sıralanabilir olamaz sadece anahtar/değer çiftleri HashMap olduğunu. Öte yandan, bir karakterin etrafındaki karakterleri hareket ettirerek bir JSON nesnesini "Sıralama" durumuna getirebilirsiniz. JSON'u bir nesne olarak okuyup belleğe yüklediğinizde, bu sahte "sıralı" yı kaybedersiniz ve JS motorunun nasıl uygulandığına bağlı olarak anahtarları değiştirirsiniz.

alt çizgi _.each işlevi, anahtar/değer çiftlerinizi aşan ve üzerlerinde bir işlev çalıştıran bir for döngüsü için yalnızca bir sarmalayıcıdır. dizileri çaprazlamak için _.each kullanmalısınız.

TL; DR: sıraladığınız

nesneleri olamaz ama bunu bir diziye değerleri aktarmak ve yerli Array.prototype.sort işlevini kullanarak orada sıralamak yapabileceklerini.