如何检查并删除不再需要的数组项?

时间:2012-06-14 17:03:06

标签: javascript jquery google-maps google-maps-api-3

我正在使用Google Maps API v3,我有一系列标记(markersArray),每个标记都包含一个名为“id”的元素。通过Ajax,我点击一个数据库并将当前ID值作为数组(tokID)返回并调用'loadMarkers'函数。

在'loadMarkers'函数中,我需要删除与db返回的ID值不匹配的任何数组项。我已经研究过.splice()和.filter()但是在我的生活中不能让它运转起来。

很抱歉没有代码示例。我真的很难过,也没有什么可以解决的。

THX! 麦克

2 个答案:

答案 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

修改上述代码以满足您的需要。

$.map $.inArray

检查Working Fiddle

查找从服务器发送的额外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);
​