Javascript 使用if…else比较对象属性的替代方法
我希望我把问题说清楚。 我有几个对象,我用一个名为address的属性创建了它们。例如,Obj1具有地址0x0000,Obj2具有地址0x0004,依此类推。 有一个我需要处理的随机输入地址列表。一旦输入地址是对象地址之一(如果addr=0x0000 | | addr=0x0004…),则会自动加载函数。 目前,我通过一个对象地址列表来比较它,我认为这是对迭代的浪费。有没有办法,我可以通过索引访问它?例如,输入0x0004的输入地址后,将直接运行一个函数 编辑:谢谢你的回答:)我现在有了一个更清晰的想法你有两个选择: 使用开关定义所有功能:Javascript 使用if…else比较对象属性的替代方法,javascript,Javascript,我希望我把问题说清楚。 我有几个对象,我用一个名为address的属性创建了它们。例如,Obj1具有地址0x0000,Obj2具有地址0x0004,依此类推。 有一个我需要处理的随机输入地址列表。一旦输入地址是对象地址之一(如果addr=0x0000 | | addr=0x0004…),则会自动加载函数。 目前,我通过一个对象地址列表来比较它,我认为这是对迭代的浪费。有没有办法,我可以通过索引访问它?例如,输入0x0004的输入地址后,将直接运行一个函数 编辑:谢谢你的回答:)我现在有了一个更清
switch (input){
case '0x0000': function(input){}; break;
case ...
}
使用预定义的地图:
var functionMappings = {
'0x0000': function_1,
'0x0001': function_2,
};
if(functionMappings[input]) {
functionMappings[input](input);
}
我更喜欢第二个示例,因为它可以在运行时动态创建
更新:
您可以创建函数映射
动态,如下所示:
var functionMappings = {// create first entries, or defualt functions
'0x0001': function_1,
'0x0002': function_2
};
if(condition_x) { // add new or overwrite existing functions
functionMappings[0x0005] = function_5;
}
因为这是一个映射,如果需要,您甚至可以覆盖默认函数定义。迭代一次并将所有地址作为对象的键:
var addresses = {};
for(var i=0;i<objList.length;i++){
addresses[objList[i].addr] = {};
addresses[objList[i].addr].fn = correspondingFunction
// you can even attach the corresponding object to it
// addresses[objList[i].addr].obj = addresses[objList[i].addr];
}
也许你想看看
case
也许是字典/对象<代码>{'0x000':函数(){..},..}[addr]()?如果您提供一些示例代码,会更清楚。是的,我需要将函数分配给字典键(我忘记删除大括号:),您可能需要'0x0000':函数1
,因为0x0000!='0x0000'
。这一点很好,但我们应该使用十进制或字符串名称,而不是十六进制数字,它们更易于阅读。@Beri我喜欢你的第二个示例,我想这就是我要找的。也可以动态创建“预定义地图”吗?
function getAddrFunction(addr){
if(addresses[addr] !== undefined){
return addresses[addr].fn;
}
return null;
}