2016-03-30 5 views
1

私は、キーではなく値に基づいてアルファベット順にソートされたJSONオブジェクトを持っています。しかし、_.eachを使用してオブジェクトを$selectのフォームに挿入すると、オブジェクトはキーに基づいてオブジェクトを使用しています。誰も私がこれを防ぐ方法を知っていますか?アンダースコア_.each関数 - キーではなく値でソート

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})); 
     }); 

答えて

1

JSONはJavaScriptの構文に似ているデータの文字列表現ですので、あなたは、JavaScriptのオブジェクトについて話される可能性があります。

オブジェクトがある場合、その要素の順序は保証されません。データ構造を変更する必要がある配列を使用してのみソートできます。

は、次のリンクは同様にあなたの質問に答えるホープ:Does JavaScript Guarantee Object Property Order?

0

javascriptオブジェクトは、それが(配列とは違って)ソートすることができないだけで、キー/値のペアのハッシュマップです。一方、文字を移動することでファイル上のJSONオブジェクトを「ソート」することができます。 しかし、オブジェクトとしてJSONを読み込んでメモリにロードすると、この偽の「並べ替え」が失われ、JSエンジンの実装方法に基づいてキーがトラバースされます。

アンダースコア_.each関数は、キー/値のペアで実行され、関数を実行するforループの単なるラッパーです。配列をトラバースするには_.eachを使用してください。

TL; DR:あなたはソート

オブジェクトことはできませんが、あなたはそれが配列に値を転送し、ネイティブArray.prototype.sort機能を使って、そこに並べ替える何を行うことができます。

関連する問題