当 id 在另一个数组中时对象中的 JavaScript 操作

标签 javascript arrays google-maps google-maps-api-3

我在 Google map API v3 中的代码有问题。标记每分钟更新一次(或随时手动更新)。但我不想删除所有标记,然后再次“重新上传”,导致标记然后“闪烁”。

我们的网站中有许多影响查看标记的过滤器。因此,一次可能有 5000 个标记,1 秒后应该只有 1。

但是我怎样才能正确地做到这一点呢?有我的“addMarker”功能。

this.addMarker = function(id, object)
    {
        if(typeof object == 'undefined'){
            return;
        }

        if(!this.markers[id])
        {
            object.marker = new google.maps.Marker({
                position: new google.maps.LatLng(object.lat, object.lng),
                icon: object.image
            });
            if((object.approved == "1" && MapApprovedControl.enabled) || object.approved == "0" && MapUnapprovedControl.enabled){
                object.marker.setMap(this.canvas);
            }

            this.markers[id] = object;
        }
        else
        {
            if(this.markers[id].marker.getIcon() != object.image) {
                this.markers[id].markers.setIcon(object.image);
            }

            if(this.markers[id].marker.getMap() == null){
                this.markers[id].marker.setMap(this.canvas);
            }
        }

        this.updated.push(id);
    };

在“else” block 中,我将索引添加到数组中,这样我就可以找出哪些数据已经存在以及哪些标记丢失。

    this.updated = [];

    this.update = function()
    {
        if(this.updated.length > 0)
        {
            $.each(this.markers, function(index)
            {
                var exists = false;
                $.each(map.updated, function(key, value){
                    if(index == value){
                        exists = true;
                        return;
                    }
                });

                if(!exists){
                    map.markers[index].marker.setMap(null);
                }
            });

            this.updated = [];
        }
    };

本地图更新时,会发生这种情况:

$.getScript('/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP', function() {
                map.update();
            });

在此 URL 中只是“addMarker(..); addMarker(...);”

但是这个解决方案是不正确的。一旦它起作用,一旦不行 - 不知道为什么:D + 它很慢。

所以我的问题是:

  1. 如何正确更新标记?
  2. 在更新过程中,我有两个周期吗,有什么办法可以使用数组过滤器吗?

非常感谢!

编辑:我修改了代码,删除了无用之处,并将“this.updated.push(id)”移到了条件之后。这解决了有时有效有时无效的问题。尽管如此,两个周期仍然是一个问题。 (我仍然认为这不是正确的方法)

EDIT1:好的,有时仍然不起作用......通常当我得到的标记数量比以前少时。

EDIT2:好的,脚本(ajax 片段)有时未加载(可能已缓存,idk)

EDIT3:这可能是无需 2 个周期即可更新标记的最佳方法

this.update = function()
{
    if(this.updated.length > 0)
    {
        $.each(map.markers, function(index){
            if($.inArray(index, map.updated) == -1){
                map.markers[index].marker.setMap(null);
            }
        });
        this.updated = [];
    }
};

但是我仍然不知道如何加载我的JS文件(如果有很多标记,那么脚本只是不读取,不写入任何错误) - pfff我不明白。

EDIT4:好的,通过添加这个(在ajax片段 - 更新中)可能可以修复

<script type="text/javascript">
        function load_js()
        {
            var head= document.getElementsByTagName('head')[0];
            var script= document.createElement('script');
            script.type= 'text/javascript';
            script.src= '/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP';
            head.appendChild(script);
        }
        load_js();
    </script>

并添加“map.update();”/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP 文件中最后一行之后的行。

下一个问题是:当我们的 map 中不存在标记时,仅加载标记(嘿,这个主题就像私有(private)记事本,lel)

好吧,这可能是“无解”,我需要神的力量,待续…… 但无论如何,非常感谢您的帮助! :-))

最佳答案

您是否考虑过隐藏标记而不是为每个过滤器重新显示它们?显示所有标记,然后关闭所有不在过滤器集中的标记。这使您的代码保持干净,因为您只需输出标记一次。

关于当 id 在另一个数组中时对象中的 JavaScript 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39191924/

相关文章:

ios - Google maps turn by turn 用于 ios 开发的 gps 导航

javascript - XMLHttpResponse 对象在每次调用 open() 时加载相同的内容

python - Python 中的冒泡排序

Python 集合与数组

困惑 : Dynamic Allocation of 2D array, C

android - 使用计时器从 JSON 添加多个标记

javascript - 限制 Object.fromEntries 的推断类型

javascript - 更改滚动间隔/单位/像素

javascript - 从javascript中的数组中删除对象

javascript - 在 React 中单击时切换子项或其相关兄弟项的事件类