在d3过滤器内循环的适当方法(或者,如何选择多个功能)

时间:2014-07-21 04:28:39

标签: json loops d3.js topojson

让我们说我有一个这样的数组,我想用它来进行模式匹配:

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];}

如果需要更多注释,请告诉我。

2 个答案:

答案 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;
});