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

How can I check for and remove an array item that is no longer needed?

本文关键字:数组 不再 检查和 删除      更新时间:2023-09-26

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

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

很抱歉没有代码示例。我真的很困惑,真的没有什么可脱的。

感谢!话筒

粗略地说,你可以做这样的事情,

更新的工作代码

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);
​

我不确定您拥有哪些数据以及在调用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);