【发布时间】:2017-02-10 01:16:03
【问题描述】:
我的主要任务是更新地图上的标记。
符号:
地图上实时显示的标记:
var markers = [
{ 'lat':10, 'lng':10, 'type':'simple'},
{ 'lat':20, 'lng':20, 'type':'simple'},
{ 'lat':40, 'lng':40, 'type':'cluster'}
]
应该在地图上的新标记:
var newMarkers = [
{ 'lat':10, 'lng':10, 'type':'simple'},
{ 'lat':20, 'lng':20, 'type':'simple'},
{ 'lat':30, 'lng':30, 'type':'simple'},
{ 'lat':50, 'lng':50, 'type':'simple'}
]
因此问题被简化为我想找到解决方案的子任务:
从另一个对象数组 - newMarkers 更新对象数组 - markers。
因此,需要对markers数组进行如下操作:
- 从
markers中删除不在newMarkers中的对象(通过三个属性比较:lat、lng、type)。 - 如果不存在,则将来自
newMarkers的对象添加到markers(与lat、lng相比)。如果存在标记(通过两个属性:lat、lng),则需要对其进行更新,即用来自newMarkers的新标记替换。
我的解决方案无效,因为它在大量标记上执行了很长时间。
更新后的markers 数组应如下所示:
console.log(markers)
{ 'lat':10, 'lng':10, 'type':'simple'},
{ 'lat':20, 'lng':20, 'type':'simple'},
{ 'lat':30, 'lng':30, 'type':'simple'},
{ 'lat':50, 'lng':50, 'type':'simple'}
【问题讨论】:
-
您目前的解决方案是什么?
-
我们对数据了解吗?是否按任何排序顺序?每对 lat/lng 的标记是唯一的吗?
-
你得到的数组与
newMarkers完全相同,我看不出它有什么不同——你实际上是在删除 newMarkers 数组中没有的任何东西 -
markers = newMarkers,根据您的示例数据集判断。 -
@hackerrdave 我的解决方案,但它在大标记数上运行缓慢 -pastebin.com/NnBU9Fpz
标签: javascript arrays algorithm leaflet lodash