Javascript 如何检查和删除不再需要的数组项?
我正在使用Google Maps API v3,我有一个标记数组markersArray,每个标记数组都包含一个名为“id”的元素。通过Ajax,我点击一个db并返回当前ID值作为数组tokID,然后调用一个“loadMarkers”函数 在'loadMarkers'函数中,我需要删除与数据库返回的ID值不匹配的任何数组项。我已经研究了.拼接和.过滤器,但我这辈子都不能让它工作Javascript 如何检查和删除不再需要的数组项?,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我正在使用Google Maps API v3,我有一个标记数组markersArray,每个标记数组都包含一个名为“id”的元素。通过Ajax,我点击一个db并返回当前ID值作为数组tokID,然后调用一个“loadMarkers”函数 在'loadMarkers'函数中,我需要删除与数据库返回的ID值不匹配的任何数组项。我已经研究了.拼接和.过滤器,但我这辈子都不能让它工作 很抱歉没有代码示例。我真的被难住了,没有什么好抱怨的 谢谢! Mike在调用loadMarkers之前,我不确定您拥有
很抱歉没有代码示例。我真的被难住了,没有什么好抱怨的 谢谢!
Mike在调用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);
大致上你可以这样做 更新的工作代码 修改上述代码以满足您的需要 检查 查找从服务器发送的额外ID的最终代码也是:
很抱歉没有代码示例。我真的被难住了,没有什么好抱怨的。也许你应该回来,当你有一些东西给我们一起工作。看看这里:谢谢你的答复!使用您的示例,您能告诉我当代码运行时,如果newArray与orgArray匹配,我希望看到什么结果吗?我想我看到它正在删除id:1?在我的特殊情况下,如果新的id值与原始数组中已有的id值相同,我不希望原始数组发生任何事情。谢谢!你是说即使newArray也是一个id属性类似[{id:1},{id:3}]的数组吗?如果不想更改原始阵列,您想做什么?很抱歉,我不明白你的问题,抱歉搞混了。如果新数组类似于[1,3],我肯定希望更改原始数组[{id:1},{id:2},{id:3}]。如果新数组与原来的[1,2,3]相同,我不想做任何更改,但当它们相同时,您的代码会导致{id:1}从数组中删除吗?如果我错误地解释了结果,我很抱歉……这对我来说是全新的好啊作为测试,当我运行您发布的代码时,在Firebug控制台中我返回[Object{id=2},Object{id=3}]。这是预期的输出吗?是的,这是预期的结果,但我不确定你的要求是什么。是否只删除新阵列中不存在的ID?您好!谢谢你的回复。在Firebug控制台中,使用测试值[{id:1}、{id:2}、{id:3}]和[1,3]尝试代码时返回[Object{id=1}、Object{id=2}、Object{id=3}]。这是正确的还是应该只返回[Object{ID=1},Object{ID=3}]?谢谢!太好了!这似乎奏效了!如果newid返回的ID不在markersArray中,我将如何处理它?我有一个addMarkers函数,我只是不知道在哪里执行它…或者更好的方法是在控制台中按顺序检查所有值。只编写了一个dummyAddmarker函数来演示如何循环新ID并将每个ID添加为标记。看看这里嘿,乔伊,一切都很顺利!还有一个问题。使用您最新的fiddle,我如何创建一个只包含来自orig数组的未使用id的数组?用你的例子来说就是ID的6和8。谢谢!我试图愚弄inArray方法,但没有得到正确的结果。
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
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);