好的,我有一个doozie所以任何帮助非常感谢。我之前在这里发过这个问题,但可能省略了一些背景,所以我要再试一次!我有四个geojson图层,每个图层都是数组格式。要访问这些图层中的信息,它似乎是嵌套的:layers-object-features-properties。以下是数据结构示例:
{
"type": "Feature",
"properties": {
"info_city": "Wuerzburg",
"info_date": 2009,
"info_status": "fac"
},
我想要过滤的属性是date,在我的数据中,它是字段“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 :(得分:1)
您的问题可能是使用“严格相等”进行过滤检查。在您的数据结构中,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