2016-09-22 80 views
2

好吧,我有一个doozie,所以任何帮助非常感谢。我之前在此发布过这个问题,但可能会遗漏一些背景信息,所以我会再试一次!我有四个geojson图层,每个图层都是数组格式。要访问这些图层中的信息,它看起来像这样嵌套:layers-object-features-properties。下面是数据结构的一个样本:小册子地图:按年筛选

{ 
"type": "Feature", 
"properties": { 
"info_city": "Wuerzburg", 
"info_date": 2009, 
"info_status": "fac" 
}, 

我想,以滤除属性是日期,这在我的数据是场“info_date”。我写了下面的函数,随机抽取一年作为测试过滤。这将被链接到我的地图上的范围滑块栏,范围从1971年至2016年。

function filterByYear(data){ 
    console.log(data) 
    f = data.filter(function(d){ return d.features.properties.info_date === '2016';}) 
    console.log(f) 
    return f; 
    } 

顺便说一句,我也尝试过这种使用underscore.js,不得要领:

f=_.filter(data, function(d) { return d.properties.info_date == 2016; }); 

因此,我调用这个函数在那里我索引范围滑尺,像这样,使用图层geoJsonLayers.fellows作为输入。

if (index == 2015) { 
    filterByYear(geoJsonLayers.fellows) 
    } 

什么也没有发生,而在filterByYear功能,我能够CONSOLE.LOG(数据),但没有控制台的(F)。我在这里做错了什么?并且,是否有一种更容易的方法可逐年过滤,因为我真正想要做的是在用户移动范围滑块时进行过滤,即当index = 1980时,只显示其中显示“info_date”== 1980的数据。任何帮助在这里非常感谢!谢谢。

回答

0

您的问题可能是使用“严格平等”您的筛选器检查。在您的数据结构中,info_date整数,但您严格检查字符串'2016'

尝试使用==而不是===并查看是否可以解决您的问题。您也可以尝试检查2016而不是'2016'


编辑:如果你想解决您的动态检查一年的问题,你可以通过一年分为filterByYear作为参数:

function filterByYear(data, year) { 
    f = data.filter(function(d) { 
    return d.features.properties.info_date == year; 
    }); 
    return f; 
} 

编辑2:以下作品我使用(大约)您的样本数据。

k = [{ 
    "type": "Feature", 
    "properties": { 
    "info_city": "Wuerzburg", 
    "info_date": 2009, 
    "info_status": "fac" 
    } 
},{ 
    "type": "Feature", 
    "properties": { 
    "info_city": "Berlin", 
    "info_date": 2016, 
    "info_status": "fac" 
    } 
}]; 

function filterByYear(data, year) { 
    f = data.filter(function(d) { 
    return d.properties.info_date == year; 
    }); 
    return f; 
} 


filterByYear(k, 2009); // Returns array of one object 
filterByYear(k, 2016); // Returns array of one object 
filterByYear(k, 2008); // Returns empty array 
+0

Thanks Will!但仍然没有运气。我尝试了你的建议。我认为数据可能以一种奇怪的方式嵌套,并且无法访问数据。我不确定我会如何显示。 – DiamondJoe12

+0

你在浏览器中工作吗?在'filterByYear()'的开头,你可以通过'console.log(data)'来查看对象的结构,并找出'info_date'是如何嵌套的。 –

+0

请问 - 谢谢,我试过这样做,我认为我对结构有更好的处理,但我仍然无法控制'filterByYear()'函数中的任何内容(在每年筛选内)。例如,当我尝试console.log'd'或'f'时,看看发生了什么,没有显示。我不确定这是为什么。因此,这似乎是它可能破裂的地方。 – DiamondJoe12