Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用if…else比较对象属性的替代方法_Javascript - Fatal编程技术网

Javascript 使用if…else比较对象属性的替代方法

Javascript 使用if…else比较对象属性的替代方法,javascript,Javascript,我希望我把问题说清楚。 我有几个对象,我用一个名为address的属性创建了它们。例如,Obj1具有地址0x0000,Obj2具有地址0x0004,依此类推。 有一个我需要处理的随机输入地址列表。一旦输入地址是对象地址之一(如果addr=0x0000 | | addr=0x0004…),则会自动加载函数。 目前,我通过一个对象地址列表来比较它,我认为这是对迭代的浪费。有没有办法,我可以通过索引访问它?例如,输入0x0004的输入地址后,将直接运行一个函数 编辑:谢谢你的回答:)我现在有了一个更清

我希望我把问题说清楚。 我有几个对象,我用一个名为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;
}