Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查和删除不再需要的数组项?_Javascript_Jquery_Google Maps_Google Maps Api 3 - Fatal编程技术网

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

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之前,我不确定您拥有

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

在'loadMarkers'函数中,我需要删除与数据库返回的ID值不匹配的任何数组项。我已经研究了.拼接和.过滤器,但我这辈子都不能让它工作


很抱歉没有代码示例。我真的被难住了,没有什么好抱怨的

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