我有一个谷歌地图,我通过ajax从数据库中渲染标记。除了标记重绘(旧的删除和新绘制)之外,它的效果很好。我从ajax返回的数据是逗号分隔变量的文本形式。我试图找到一种有效的方法来删除不再适用的数据并添加新的数据。我认为,一旦我从ajax帖子中获取数据就处理这个问题的最佳方法,因为在它变成标记之前它是最纯粹的形式。
之前有没有人这样做过或者有经验?如果我在LINQ中这样做,除了两个数据列表之外我会做某种事情。我不知道如何在js中快速执行它,因为js是循环中较慢的一部分。
答案 0 :(得分:0)
问题中可能没有足够的细节,但假设如下:
如果不是这样,那么请澄清问题,添加细节。 “之前”和“之后”会很好。
否则,这样的方法应该有效:
示例数据:
var oldMarkers = [ "Joe's Diner",
"Frank's Bail bonds",
"Precinct 9",
"Fence and Go"
];
var newMarkerStr = "Precinct 9, Memorial Hospital,"
+ " Frank's Bail bonds, Mary's shyster";
//-- Split on commas; strip out boundary whitespace.
var newMarkers = newMarkerStr.split (/(?:\s*,\s*)+(?!(?:\s*,\s*))/);
这样的流程:
var toAdd = newMarkers.slice (); //-- Copy the array.
var toDelete = $.grep (oldMarkers, function (marker) {
var K = $.inArray (marker, newMarkers);
if (K == -1) {
//-- Old item not in the list, delete it.
return true;
}
else {
/*-- Old item is in the new list, mark it as
to be removed from the "add" list.
*/
toAdd[K] = -666;
}
return false;
} );
toAdd = $.map (toAdd, function (marker) {
return (marker == -666) ? null : marker;
} );