让我们说我有一个这样的数组,我想用它来进行模式匹配:
var mich = ["Michigan", "Connecticut", "Florida", "New York"];
var arrayLength = mich.length;
我有一个像这样的topojson对象,嵌套在一个访问topojson文件的基本d3.json函数中:
var allstates = topojson.feature(us, us.objects.layer1);
我使用过滤器:
var fromstate = allstates.features.filter()[0];
如何在topojson.features中找到与我的数组匹配的所有对象?通过过滤器内部数组的循环仅匹配第一个对象。即,这在过滤器内失败:
function (d){ for (i=0; i<arrayLength; i++){ return d.properties.NAME == mich[i];}
如果需要更多注释,请告诉我。
答案 0 :(得分:2)
在你的功能中尝试这个
return mich.indexOf(d.properties.NAME) >= 0;
而不是
for (i=0; i<arrayLength; i++){ return d.properties.NAME == mich[i];}
它会做什么,它会检查d.property.NAME
&amp; mich[0]
相等,如果两者相等,则返回true
,否则返回false
。
答案 1 :(得分:1)
var mich = ["Michigan", "Connecticut", "Florida", "New York"];
var allstates = topojson.feature(us, us.objects.layer1);
var fromstate = allstates.features.filter( function (d){
for (i=0; i<mich.length; i++){
if (d.properties.NAME == mich[i]) {
return true;
}
//otherwise the loop continues
}
//if none of them matched
return false;
});
或者,如果您不需要支持IE&lt; 9:
var fromstate = allstates.features.filter( function (d){
return mich.indexOf(d.properties.NAME) != -1;
});