0

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

在“loadMarkers”函数中,我需要删除任何与从数据库返回的 ID 值不匹配的数组项。我已经研究过 .splice() 和 .filter() 但我一辈子都无法让它工作。

抱歉没有代码示例。我真的很难过,真的没有什么可去的。

谢谢!麦克风

4

2 回答 2

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

检查工作小提琴

找出从服务器发送的额外 ID 的最终代码也是:小提琴

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);
​
于 2012-06-14T17:15:18.490 回答
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);
于 2012-06-14T17:13:51.777 回答