2015-07-05 143 views
1

這是將地圖列爲jsp的代碼,其中jQuery如何按值打印HashMap而不是按Jquery鍵打印

function getCustomerMap() { 
    $.ajax({ 
     url: serverUrl + "/getMap", 
     success: function (data) { 
      var map = JSON.parse(data); 
      $.each(map, function (key, value) { 
       $('#users').append('<li data-user="' + key + '"><a>' + value.name + '</a></li>');      
      }); 

這是的HashMapJSON怎麼來的jsp:

enter image description here

就像你可以看到,地圖按名稱排序。

但是,這是怎麼的HashMap列出:

enter image description here

的地圖是小項中列出來最大的!

我想的是,地圖被列出像談到的jsp ..

+0

'HashMap'沒有任何順序。如果您希望以與收到的相同的方式對條目進行排序,您應該改爲使用「LinkedHashMap」。 – RealSkeptic

+0

我試圖做到這一點。我用LinkedHashMap替換了HashMap,但排序列表的方法給了我這個錯誤:**條目在linkedhashmap中有私人訪問** – Dave

+0

我將HashMap轉換爲LinkedHashMap,但結果相同。問題出在jQuery – Dave

回答

1

當在客戶端側接收到地圖的字符串表示,它成爲一個普通的舊javascript對象,並且鍵是它的字段。它們的自然排序順序是「1」,「2」,「3」,「4」,「5」,「6」。這就是它按照這個順序顯示的原因。一種以您想要的方式顯示它的方法是將其轉換爲一個對象數組(地圖值),並使用javascript按名稱排序:

function getCustomerMap() { 
    $.ajax({ 
     url: serverUrl + "/getMap", 
     success: function (data) { 
      var map = JSON.parse(data); 
      var arr = new Array(); 
      for (var key in map) 
       arr.push(map[key]); // add the map values to the array 

      // sort the array by name 
      arr.sort(function(a, b){ 
       if (a.name < b.name) 
        return -1; 
       if (a.name > b.name) 
        return 1; 
       return 0; 
      }); 

      // iterate by array index and append the list items. 
      // now you use the id field of the objects as your data-user values. 
      for (var i in arr) 
       $('#users').append('<li data-user="' + arr[i].id + '"><a>' + arr[i].name + '</a></li>'); 
     } 
    }); 
} 
+0

作品!非常感謝!!! – Dave

+0

我可以再問你一件事嗎? – Dave

+0

當然。它是什麼? – Tap

相關問題