关联数组中的Javascript函数不工作

关联数组中的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

我试图让下面的内容返回相应的密钥,但只得到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”; 变量区域代码={ 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,我在其中说,否则,只有当值恰好是对象中的第一个键时,它才会起作用。不管怎样,我感谢你的意见,即使是投反对票。我只是担心我的回答可能有技术上的错误