我希望我明白我的问题。 我有一些使用名为address的属性创建的对象。例如,Obj1的地址为0x0000,Obj2的地址为0x0004,依此类推。 我需要处理一个随机输入地址列表。一旦输入地址是对象地址之一(如果addr = 0x0000 || addr = 0x0004 ....),则会自动加载一个函数。 目前,我正在通过一个Object地址列表对它进行比较,我认为这是浪费迭代。有什么办法,我可以通过索引访问它吗?例如,一旦我输入0x0004的输入地址,就会直接运行一个函数。
编辑:感谢您的所有答案:)我现在有一个更清晰的想法
答案 0 :(得分:3)
你有两个选择:
使用开关定义所有功能:
switch (input){
case '0x0000': function(input){}; break;
case ...
}
使用预定义的地图:
var functionMappings = {
'0x0000': function_1,
'0x0001': function_2,
};
if(functionMappings[input]) {
functionMappings[input](input);
}
我更喜欢第二个例子,因为它可以在运行时动态创建。
<强>更新强>:
您可以像这样创建functionMappings
dynamicaly:
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;
}
因为这是一张地图,所以如果需要,你甚至可以覆盖默认的功能定义。
答案 1 :(得分:0)
迭代一次并将所有地址作为对象的键:
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];
}
我使用循环作为示例,但您可以以任何适合您的方式进行
然后你有一个按地址键入的对象列表,你可以通过它来获取它们:
function getAddrFunction(addr){
if(addresses[addr] !== undefined){
return addresses[addr].fn;
}
return null;
}