我有这个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没有运气。
感谢您的帮助
答案 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/
除了以这种方式管理更容易之外,如果你有很多选择,它也会带来相当大的性能提升,因为多个附加速度比一个大附加速度慢。