我有一个函数,里面有很多常量变量。将这些变量存储在Hash-map中会更好(这将是一个复杂的变量)(它会在Hash-map中包含哈希映射。或者若是if,否则是if子句。就可读性而言,它们是关于但我担心的是内存占用和应用程序的速度。这是一个非常简化的问题版本:
function myFunction(data) {
var a = 0, b = 0, c = 0, d = 0;
if(data == value1) {
a += 3;
if(value1Fetched) {
b += 6;
c +=2;
d +=1;
}
} else if (data == value2) {
a += 1;
if(value2Fetched) {
b += 4;
c +=9;
}
}
return a+b+c+d;
}
显然有更多的标志和值(而Data也是Hash-map)
版本2:
function myFunction(data) {
var a = 0, b = 0, c = 0, d = 0;
var myHash = {
value1: {
a: 3,
b: 6,
c: 2,
d: 1
},
value2: {
a: 1,
b: 4,
c: 9,
d: 0
}
};
a += myHash[data][a];
if(isFetched(data)){
b += myHash[data][b];
c += myHash[data][c];
d += myHash[data][d];
}
return a+b+c+d;
}
对于凌乱的(伪)代码感到抱歉,我试图让它尽可能可读。 这几天困扰着我,工作中的每个人都有不同的看法。
答案 0 :(得分:1)
我想说第二个问题的可扩展性远远超过任何可能(并且不太可能)的性能问题。如果需要,您甚至可以动态更改该结构,或者对于映射结果不同的两个环境具有多个实例。
对于与您发布的示例一样小的示例,它可能会更慢,但听起来实际上可能有很多条目,在这种情况下使用地图查找具有O(log(n))复杂度而不是O( n)(希望我的条款正确!从大学开始已经有一段时间了)。大型JSON对象(字符串映射)在JavaScript中并不罕见,事实上,您经常使用它们来处理常用代码中的库和浏览器功能。