基于key为JS数组赋值变量

时间:2015-10-22 18:15:26

标签: javascript arrays

我有一个变量,它从当前对象的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做到这一点,但这看起来很草率,并且给将来的错误留下了很大的空间。

我是否可以选择以某种方式查找正确的密钥,然后根据它分配变量?

3 个答案:

答案 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