我有一个变量,它从当前对象的ID属性中取值,它总是看起来像 filtercolor-red :
$('.facet-options-list li input[id*=filtercolor]').each(function() {
var filterColor = $(this).attr('id');
...
});
我还有一个数组,列出了可能的ID和相应的HEX代码:
var activeFilterBg;
var filterBgColor = [];
filterBgColor = {
filtercolor-black: '#171710',
filtercolor-blue: '#4C94B6',
filtercolor-brown: '#50443D',
filtercolor-gold: '#F6D069',
filtercolor-green: '#96B14D',
filtercolor-grey: '#A8AAA5',
filtercolor-orange: '#DB5E46',
filtercolor-pink: '#E78EB1',
filtercolor-purple: '#59547E',
filtercolor-red: '#D22200',
filtercolor-silver: '#EBEBEB',
filtercolor-white: '#FFF'
};
我想要做的是filterColor
并从activeFilterBg
分配filterBgColor
相应的HEX代码。我可以用switch
做到这一点,但这看起来很草率,并且给将来的错误留下了很大的空间。
我是否可以选择以某种方式查找正确的密钥,然后根据它分配变量?
答案 0 :(得分:3)
这不是一个数组,而是一个对象。您为变量分配一个数组,但随后立即用对象替换它。一个对象适用于此,所以只需跳过该数组。 (注意,正如Jordan指出的那样,当参数名称包含破折号时必须引用它们。)
您可以使用括号语法使用变量
访问对象属性func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
self.locationManager.requestStateForRegion(region)
}
}
答案 1 :(得分:1)
首先使用hasOwnProperty
检查对象 - 如果属性存在,请使用它!
$('.facet-options-list li input[id*=filtercolor]').each(function() {
var filterColor = this.id; //$(this).attr('id');
var color;
if (filterBgColor.hasOwnProperty(filterColor) {
color = filterBgColor[filterColor];
} else {
color = "#FFF"; //not found
}
});
答案 2 :(得分:0)
将id映射到颜色应该像
一样简单var filterColor = $(this).attr('id');
var hexCode = filterBgColor[filterColor];
//then do whatever with the hexCode