扩展前一个关于JavaScript和jQuery的问题,我正在尝试创建一个数组然后查看它,但是数组包含维度而且我无法正确...
var markers = [];
$.getJSON('GetList', "id"= + data.id,
function(data){
$.each(data.list, function(index, data) {
}
markers.push( {
category:data.category,
id:data.id,
location:{
latitude:data.location.latitude,
longitude:data.location.longitude
}
});
});
});
return markers;
}
首先让我感到震惊的是,现在每个项目都会被称为“对象”,而默认情况下,我仍然想知道它们是否可以被贴上标签?
接下来,我尝试访问id以将其与用户的选择进行比较, 但它不起作用。
var selection = $(div_id).val();
var arr = $.inArray(selection, markersArray.id);
if( arr >= 0) {
return search(selection, div_id);
} else {
throw("selection not found in selectionSearch()");
}
我在这里做错了什么..?
答案 0 :(得分:1)
要标记对象,请添加toString
函数,如下所示:
markers.push({
toString: function () { return this.something; },
category:data.category,
id:data.id,
location:{
latitude:data.location.latitude,
longitude:data.location.longitude
}
});
要搜索数组,您需要自己的循环
jQuery的$.inArray
函数在数组中搜索完全匹配;它不能用于查找具有匹配属性的对象
你可以自己找到一个匹配,如下:
for(var i = 0; i < markers.length; i++) {
if (markers[i].id === selection)
return search(selection, div_id);
}
throw("selection not found in selectionSearch()");
答案 1 :(得分:0)
每个项目的类型都是Object,没有什么奇怪之处。没有理由试图改变它。
要根据项目中的属性过滤掉数组中的项目,请使用grep
方法:
var arr = $.grep(markers, function(e){ return e.id === selection; });
要检查数组是否为空,您不要将数组与数字进行比较,而是使用length
属性:
if (arr.length > 0) {