将一个值与 Javascript 中数组中的所有值进行比较

Compare a value with all the values in array in Javascript

我正在尝试实现以下功能 运行 但我卡得很厉害。我有一个对象 "gidsAll",我想将其与每个特征进行比较:feature.attributes.__gid.

该函数在 Openlayers 中用于特征(点和线)的样式设置。它针对每个 "feature.attributes.__gid" 执行,我想要的是简单地将此值与 "gidsAll" 内的所有值进行比较。如果该值与 "gidsAll" 中的值之一匹配,则 return 绿色,否则 return 红色。

我想我需要在某个地方使用循环,但我无法让它工作。

    var styleContext = {
            getColor: function (feature) {
            //alert(typeof(feature));//object
       // for (key in gidsAll){
            if (Math.round(feature.attributes.__gid) == Number(gidsAll)){
               return "green";
            } else {
                return "red";
            }   
        //} 
    }                           
};

您应该在 return red 之前检查对象中的所有属性,因为您需要确保没有 green 匹配项。请注意,return "red" 在循环之外:

var styleContext = {
    getColor: function (feature) {

        for (key in gidsAll) {
            if (Math.round(feature.attributes.__gid) == Number(gidsAll)) {
                return "green";
            }
        }

        return "red";
    }
};

您可以使用 Object.keys() 遍历所有对象属性。

Object.keys returns all the enumerable object's own properties of the object it receives.

 var styleContext = {
        getColor: function (feature) {
        var objectKeys = Object.keys(gidsAll);
        for (var i = 0; i < objectKeys.length; i++)
        {
           if (Math.round(feature.attributes.__gid) === parseInt(gidsAll[objectKeys[i]], 10)) 
           {
               return "green";
           }
        }
        return "red"; //nothing has been found
    //} 
}   

只是另一个使用 ES5 Object.keys and Array.prototype.some 方法的版本:

var styleContext = {
  getColor: function (feature) {
    return Object.keys(gidsAll).some(function (p) {
      return Math.round(feature.attributes.__gid) == gidsAll[p];
    })? 'green' : 'red';
  }
};

如果你经常这样做,使用循环更快,但是 keyssome 是简洁的。