查找嵌套对象并存储在变量中

时间:2018-09-20 21:33:45

标签: javascript html arrays object

我正在使用TomTom Maps,我需要获取地图上显示的所有标记。

我掌握了所有信息,但问题是当它们将标记聚类时。

我有以下架构:

problem

对于每个元素,我可以拥有一个 标记 ,这是我需要存储的信息。我可以让 _childClusters 包含相同的元素。

即使深度很深,我如何遍历此标记?

谢谢你们!

编辑:

基于@thedude代码,我做了一个函数,向我返回了所有引脚的数组:

var markerList = new Array();

        function getMarkers(featureBounds) {
            featureBounds.map(o => {
                // console.log('o :', o);
                if (o._childCount) {
                    getMarkers(o._childClusters)
                } 
                o._markers.map(marker => {
                    // console.log('marker :', marker);
                    if (marker.propData) {
                        markerList.push(marker)
                    }
                })
            })

        }
        
        getMarkers(featureBounds)
        console.log('markerList :', markerList);

2 个答案:

答案 0 :(得分:0)

据我所知,Record有两层。请执行以下操作:(_markers是您提供的图像中显示的父对象)。

Top

这是非常低效的,如果有人可以找到更好的方法,请这样做。

答案 1 :(得分:0)

假设data包含您问题中的数据,效率不是很高,但非常“实用”:

data.flatMap(o => o._markers)
    .concat(
         data.flatMap(o => o. _childClusters)
             .filter(Boolean)
             .flatMap(o => o._markers)
    )

这在Chrome中仍然有效,对于其他浏览器,您可能需要使用类似flatMap的东西

-编辑-

如果_childClusters更深,则可以使用递归解决方案:

function getMarkers(list) {
    return list.flatMap(o => 
         o._markers.concat(...getMarkers(o._childClusters || []))
    )
}

getMarkers(data)