我正在使用Google Maps API v3,我有一系列标记(markersArray),每个标记都包含一个名为“id”的元素。通过Ajax,我点击一个数据库并将当前ID值作为数组(tokID)返回并调用'loadMarkers'函数。
在'loadMarkers'函数中,我需要删除与db返回的ID值不匹配的任何数组项。我已经研究过.splice()和.filter()但是在我的生活中不能让它运转起来。
很抱歉没有代码示例。我真的很难过,也没有什么可以解决的。
THX! 麦克
答案 0 :(得分:0)
在调用loadMarkers
之前,我不确定您拥有哪些数据以及获取数据的格式,但如果您使用的是JQuery,并且希望根据另一个数组中的ID列表从数组中删除项目,则你是怎么做到的:
var orgArray = [{id:1},{id:2},{id:3}];
var newArray = [1,3];
var orgArray = $.map(orgArray, function(v, i){ return $.inArray(v.id, newArray) ? v : null;});
console.log(orgArray);
答案 1 :(得分:0)
大概你可以这样做,
更新的工作代码
var newIDs; // new IDs found from ajax
newIDs = [1,2]
markersArray = [{ID:1},{ID:8},{ID:2},{ID:4},{ID:6}]
var newMarkers = $.map(markersArray,function(obj,i){
if(($.inArray(obj.ID,newIDs) == -1))
return null;
else
return obj;
});
console.log(newMarkers);
// now newMarkers holds the filtered markers Array
修改上述代码以满足您的需要。
查找从服务器发送的额外ID的最终代码是:Fiddle
var newIDs; // new IDs found from ajax
newIDs = [1,2,3,4,5];
markersArray = [{ID:1},{ID:8},{ID:2},{ID:4},{ID:6}];
console.log('Orig Array: ',markersArray);
console.log('From Server: ',newIDs);
var newMarkers = $.map(markersArray,function(obj,i){
return $.inArray(obj.ID,newIDs) == -1? null: obj;
});
console.log('New Markers Objects: ',newMarkers);
var newMarkerIDs = $.map(markersArray,function(obj,i){
return $.inArray(obj.ID,newIDs) == -1? null:obj.ID;
});
console.log('New Markers ID Array: ',newMarkerIDs);
var extraIDs = $.map(newIDs,function(val,i){
return $.inArray(val,newMarkerIDs) == -1 ? val : null;
});
console.log('Extra IDs: ',extraIDs);