Javascript 得到了一个需要与另一个数组匹配的索引

Javascript 得到了一个需要与另一个数组匹配的索引,javascript,arrays,Javascript,Arrays,所以我有一个条形图,比如这个数组: [12, 32, 42, 32, 43, 0, 0, 0, 5, 0, 0, 0] 我从谷歌地图的标记中得到了这个数组,长度为6,从索引0到5 我在条形图上有一个突出显示事件,当被激发时,它会给我一个pointindex。我使用pointindex从GoogleMaps数组中获取标记,比如:“gmap.markers[pointindex]”。对于条形图数组中的前5个值,此操作非常有效。但是条形图数组中的第九个值具有pointindex 8,但是我的goog

所以我有一个条形图,比如这个数组:

[12, 32, 42, 32, 43, 0, 0, 0, 5, 0, 0, 0]
我从谷歌地图的标记中得到了这个数组,长度为6,从索引0到5

我在条形图上有一个突出显示事件,当被激发时,它会给我一个pointindex。我使用pointindex从GoogleMaps数组中获取标记,比如:“gmap.markers[pointindex]”。对于条形图数组中的前5个值,此操作非常有效。但是条形图数组中的第九个值具有pointindex 8,但是我的google maps数组只有0到5作为索引。所以它不再起作用了。基本上,pointindex 8是google maps标记数组中的索引5

例如,这些值也会出现此问题

条形图阵列:
[12,32,42,32,43,0,7,0,5,0,0,0]

谷歌地图标记数组的长度为7,因此索引范围为0到6

我有这个代码来突出显示图表中的一个条形图,这个事件被触发,我用标记来突出显示一个标记(基本上改变图标)

chart.bind('jqplotDataHighlight', 
    function (ev, seriesIndex, pointIndex, data) {
        marker = gmap.markers[pointIndex];
        if (marker !== null && marker !== undefined) {
            marker.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png');
        }
    }
);
正如我所解释的,当条形图数组的pointindex中有空数据时,条形图的索引与google标记的索引不再匹配

我脑子里想,把条形图数组复制到一个新数组中,删除所有包含“0”的值。然后将条形图数组中的值与不包含“0”的新数组进行比较值用于查看新数组中的索引。这样它将再次与google map marker索引匹配。但是,如果条形图数组有两个相同的值,则此方法将不再有效


有人知道这个问题的解决方案吗?在我看来,这个问题非常简单,但我无法在代码中找到答案。

这是一个保留索引和正确的稀疏访问索引的解决方案

var条形图=[12,32,42,32,43,0,7,0,5,0,0,0],
过滤=[];
forEach条形图(函数(a,i){
a&&filtered.push({value:a,index:i});
});

document.write(''+JSON.stringify(filtered,0,4)+'');
因此@Nina的解决方案在原则上有效,但在UI交互方面无效

基本上,您需要查看单击的条是否有值,如果有,则在Nina的过滤解决方案中映射到哪个索引。一旦您从过滤数组中获得了值所在的索引,您就可以将其映射到标记数组

要执行此操作:

我认为您最好的选择是,在构建条形图时,使用类似
{filteredIndex:N}
的对象来维护数组。此数组的长度将与条形图相同,并告诉您它映射到过滤数组中的哪个索引。如果数据为0,则filteredIndex将为空


您只需迭代数据并将值推送到筛选数组(如果值大于0),然后在单独的映射数组中维护索引,就可以做到这一点。

感谢@Alex的想法,感谢@NinaScholz的帮助,但我想您误解了我的问题,我知道这是一个模糊的问题,对不起

我这样做就解决了这个问题

加载页面时,我会执行以下操作:

chart.bind('jqplotDataHighlight', 
    function (ev, seriesIndex, pointIndex, data) {
        marker = gmap.markers[mappingArray[pointIndex]];
        if (marker !== null && marker !== undefined) {
            marker.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png');
        }
    }
);

因此,基本上我创建了一个与图表数组一样长的新数组,如果图表数组中的值不是0,我将mappingArray中此索引的值设置为与google markers索引匹配的计数索引。如果这可以做得更好,请告诉我!

为什么有
&;
?复制粘贴e错误?因为Javascript在JSF页面中,JSF需要它来正确解析它,我将把它改为&&),那么图表中的条形图如何映射到标记?你的应用程序在做什么?如果条形图没有要映射到的标记,那么以这种方式映射又有什么意义呢?因此Nina的解决方案应该在这里起作用,因为带有值的数组索引是维护的,应该直接映射到标记数组。正如您在eventListener中看到的,我得到了一个pointIndex,在第9个月的情况下,它是8。由于标记数组中没有8作为索引,侦听器中的函数不再工作。所以pointindex需要变成5,因为它在图表中是8,但在标记数组中是5。如果我使用Nina的解决方案,我确实得到了没有0值的条形图数组,但是我如何在代码中知道我需要更改pointindex的值。这只会从条形图数组中删除0值,这些值不是假值。这些点没有测量数据。签出此图像:图表上的1到12是个月。只有6个月有测量数据,所以只有那些有纬度和经度。所以只有6个标记。@NinaScholz,使用:
document.body.innerHTML=''+JSON.stringify(条形图,空,'')+''@Mr.Polywhill,什么会改变这一点?@Mr.Polywhill,好的,我明白了。@NinaScholz检查我发布的解决方案。确实,我想到了这一点。但是问题出现了,当数组中的值相同时,例如2 10。那么你如何正确地映射它。另外,如果图表中的一个点没有数据,那么就没有位置。使用nina的解决方案,我可以过滤掉0值。然后使用pointindex从原始图表数组中获取数据,然后在过滤数组中使用该值进行搜索,并从过滤数组中获取索引,该索引将与标记匹配。但问题是,当数组中有两个相同的值时,这就不再有效了,对吗?@WesleyEgbertsen,谢谢你,我明白了。只是一个minute@WesleyEgbertsen现在希望你明白我在说什么。您需要迭代数据并维护一个新数组,该数组包含从条形图数据映射到非零过滤数据的规则。
chart.bind('jqplotDataHighlight', 
    function (ev, seriesIndex, pointIndex, data) {
        marker = gmap.markers[mappingArray[pointIndex]];
        if (marker !== null && marker !== undefined) {
            marker.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png');
        }
    }
);