jquery
2014-10-07 64 views 0 likes 
0

我有這樣的JSON:jQuery的獲取一個JSON的最後一個索引

{"1":"politico","2":"cantante","3":"show girl"} 

而這個功能:

function loadProperties(parent_id) { 
    var prop_select = $('#properties'); 
    var url = '/index.php?ry6vo4cIDRptkGe2Qyx8CMLrxAKWaJnyLLSToeP8cAA=DsJAU2F4Khnb4bankxAsQdogjwpD0tFFPOf43AnCoZ4&DsJAU2F4Khnb4bankxAsQdogjwpD0tFFPOf43AnCoZ4=HNlevL7EtzTP-tBN84ZzBMbFNXI-oegccfwSB3NYgFQ'; 
    $.post(url, 
     { 
      jqaz: "get_properties", 
      parent_id: parent_id 
     },function(options,status){ 

      var obj = JSON.parse(options); 
      var len = obj.length; 
      console.log(len); 

      if(options) { 

      var i = 0; 
      $.each(options, function(val, text) { 

       var multilevel = parent_id !== 0 ? "multilevel" : ""; 
       var option = $('<option data-parent="' + parent_id + '" class="prop-option ' + multilevel + '"></option>').val(val).html(text); 

       if(parent_id === 0) 
       prop_select.append(option); 
       else { 
       if(i === 0) { 
        $('#properties option[value="' + parent_id + '"]').after('<ul>' + option); 
       }else if(i === last){ 
        $('#properties option[value="' + parent_id + '"]').after(option + '</ul>'); 
       }else{ 
        $('#properties option[value="' + parent_id + '"]').after(option); 
       } 
       } 
       i++; 
      }); 
      } 
      $('.selectpicker').selectpicker('refresh'); 
     }, 'json'); 
} 

我需要知道哪些是選項JSON對象中的最後一個索引,以在追加期間關閉元素。

問題是我無法計算長度。我總是得到「未定義」。 我試圖使用JSON.parse沒有運氣。

感謝您的幫助

回答

1

好了,你沒有真正處理指標,只是按鍵,雖然實際上是字符串,代表數字。你可以得到的最高數值是這樣的:

var maxKey = Object.keys(options).map(function(key) { return +key; }).sort().pop();

可以那麼當然用它來獲得的價值,你想:

var value = options[maxKey];


編輯:我想我誤解了你的問題。如果您只需知道對象的「長度」,可以這麼說,您可以使用var len = Object.keys(obj).length;

+1

['Object.keys'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)僅支持IE9 + – mithunsatheesh 2014-10-07 15:29:43

+0

@mithunsatheesh +1這是真的,但也非常容易填充。 – jmar777 2014-10-07 19:17:18

1

您正在通過查找「最後」屬性使其複雜化。打造爲一個字符串,然後追加一次過的所有選項...

var html = ""; 

$.each(options, function(val, text) { 
    var multilevel = parent_id !== 0 ? "multilevel" : ""; 
    var option = '<option value="' + val + '" data-parent="' + parent_id + '" class="prop-option ' + multilevel + '">' + text + '</option>'; 
    html += option; 
}); 

prop_select.html(html); 

的jsfiddle例如...http://jsfiddle.net/r7opf39y/

除了作爲更容易地管理這種方式,它也會給如果您有很多選項,性能會有相當大的提升,因爲多個附件的速度比一個大。

相關問題