[英]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 -> array
与indexOf()
类似
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.