0

私はGoogleMapsAPI v3を使用しており、それぞれに「id」という名前の要素を含むマーカーの配列(markersArray)があります。Ajaxを介して、dbをヒットし、現在のID値を配列(tokID)として返し、「loadMarkers」関数を呼び出します。

'loadMarkers'関数で、データベースから返されたID値と一致しない配列項目を削除する必要があります。.splice()と.filter()を調べましたが、一生の間それを機能させることができません。

コードサンプルがないことをお詫びします。私は本当に困惑していて、何もすることがありません。

どうも!マイク

4

2 に答える 2

0

Roughly you can do something like this,

UPDATED WORKING CODE

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

Modify the above code to suit your need.

$.map $.inArray

Check the Working Fiddle

Final Code to find out the Extra ID's sent from server too is : 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);
​
于 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 に答える