繁体   English   中英

关联数组中的Javascript函数不起作用

[英]Javascript function in associative array not working

我正在尝试获取以下内容以返回适当的密钥,但始终只能获得9。帮助并感谢您。

var strZip = "96161";

var regionCodes = {
4: '00501',    
4: '00544',    
4: '06390',    
2: '96161',    
2: '96162',
getKey: function(value){
    for(var key in this){
        if(this[key] == value){
            return key;
        }
    }
    return 9; // Default 9 if not found
    }
};

var zipKey = regionCodes.getKey(strZip);

我也尝试过(但失败了)以下内容:

getKey: function(value){
    for(var key in this){
        if( this.hasOwnProperty( key) ) {
            if(this[key] === value){
                return key;
            }
        }
    }
    return 9; // Default 9 if not found
}

您的对象中具有相同的键{4:,4:,4:,2:,2:} 尝试使按键具有唯一性, 或者像Andys answer中那样更改您的方法。

否则,只有在值恰好是对象中第一个键的情况下才起作用

 var strZip = "96161"; var regionCodes = { 1: '00501', 2: '00544', 3: '06390', 4: '96161', 5: '96162', getKey: function(value){ for(var key in this){ if(this[key] == value){ return key; } } return 9; // Default 9 if not found } }; var zipKey = regionCodes.getKey(strZip); console.log(zipKey); 

或者使用indexOf() key -> arrayindexOf()类似

 var strZip = "961261"; var regionCodes = { 4: ['00501', '00544', '06390'], 2: ['96161', '96162'], getKey: function(value){ for(var key in this){ if(typeof(this[key]) != 'function' && this[key].indexOf(value) > -1){ return key; } } return 9; // Default 9 if not found } }; var zipKey = regionCodes.getKey(strZip); console.log(zipKey); 

假定键很重要,并且与其他答案不同,它们实际上是以您在问题中提出的形式所需要的,请将您的键/代码放入数组中,而不是为每个组使用一个对象。 然后,您可以根据提供的代码对数组使用filter ,以拔出正确的密钥:

var regionCodes = {

    codes: [{
        key: 4, code: '00501'
    }, {
        key: 4, code: '00544'
    }, {
        key: 4, code: '06390'
    }, {
        key: 2, code: '96161'
    }, {
        key: 2, code: '96162'
    }],

    getKey: function (value) {
        var arr = this.codes.filter(function (el) {
            return el.code === value;
        });
        return arr.length ? arr[0].key : 9;
    }
};

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM