关联数组中的Javascript函数不工作
我试图让下面的内容返回相应的密钥,但只得到9。帮帮忙,谢谢你关联数组中的Javascript函数不工作,javascript,Javascript,我试图让下面的内容返回相应的密钥,但只得到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){ retur
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”;
变量区域代码={
1: '00501',
2: '00544',
3: '06390',
4: '96161',
5: '96162',
getKey:函数(值){
for(此字段中的var键){
if(此[键]==值){
返回键;
}
}
返回9;//如果未找到,则默认为9
}
};
var zipKey=regionCodes.getKey(strZip);
console.log(zipKey)代码>假设这些键很重要,并且与其他答案所暗示的不同,它们实际上是以您在问题中提出的形式需要的,那么将您的键/代码放入一个数组中,而不是为每个组使用一个对象。然后,您可以根据提供的代码在数组上使用来提取正确的密钥:
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;
}
};
第二个
2:'96162'
覆盖第一个。在同一个“键”上不能有多个“值”。您的代码显示具有重复属性名的对象。您应该还原映射(将值作为键)或使用数组。js没有关联数组,因此当您定义literal object-js时,不推送每个属性,但是用最后一个值覆盖同一个键值得一提的是,出于某种原因,Ecmascript 6实际上将支持重复的对象键。您想解释一下下一票的原因吗,请回答:)因为实际的键看起来很重要,否则OP不会尝试指定多个键。你还错钥匙了。例如,您返回的是1
而不是4
@Andy,OP说“我试图让下面的内容返回相应的键,但只得到9”。。。我解释了为什么他得了9分。如果实际的关键是重要的,他将需要尝试另一种方法,如你的答案。我更改了键以显示他的错误,你说:“尝试使键唯一。”而这显然不是OP想要的。@Andy,我在其中说,否则,只有当值恰好是对象中的第一个键时,它才会起作用。不管怎样,我感谢你的意见,即使是投反对票。我只是担心我的回答可能有技术上的错误