jQuery获取JSON的最后一个索引

时间:2014-10-07 15:17:11

标签: 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没有运气。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

好吧,你并没有真正处理索引,只是键,虽然实际上是字符串,但代表数字。你可以得到这样的最大数值:

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

然后,您当然可以使用它来获得您想要的值:

var value = options[maxKey];


编辑:我想我误解了你的问题。如果您只需要知道对象的“长度”,可以说,您可以使用var len = Object.keys(obj).length;

答案 1 :(得分: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/

除了以这种方式管理更容易之外,如果你有很多选择,它也会带来相当大的性能提升,因为多个附加速度比一个大附加速度慢。

相关问题