【问题标题】:Find nested objects and store in a variable查找嵌套对象并存储在变量中
【发布时间】:2018-09-20 21:33:44
【问题描述】:

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

我得到了所有信息,但问题是它们何时对标记进行聚类。

我有以下架构:

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);

【问题讨论】:

  • _childClusters 中的对象能否拥有自己的_childClusters
  • 您是在寻求一种方法来做到这一点,还是寻求一种有效的方法来做到这一点。因为我想不出一种有效的方法来做到这一点。
  • 是的,它可以有 _childClusters。 _childClusters 和 _markers 内的对象具有与“母元素”相同的属性。

标签: javascript html arrays object


【解决方案1】:

假设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)

【讨论】:

  • 谢谢你,@thedude。根据您的代码,我制作了自己的 fn。
【解决方案2】:

据我所知,_markers 有两层深。这样做:(Top 是您提供的图像中显示的父对象)。

let clusters = [];
let markers = [];
for(i = 0; i < Top.length; i++){
   clusters.push(Top[i]._childClusters);
}
for(x = 0; x < clusters.length; x++){
  markers.push({x: clusters[x]._markers});
}
for(z = 0; z < markers.length; z++){
  // do something with the marker.
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2016-03-05
    相关资源
    最近更新 更多