我有以下javascript函数,我想针对我的网络应用进行优化。
function DisplayToolTip(str) {
switch (str) {
case "a":
this.tooltip(xvalue,yvalue,text);
break;
case "b":
this.tooltip(xvalue,yvalue,text);
break;
case "c":
this.tooltip(xvalue,yvalue,text);
break;
default: break;
}
}
switch语句可能会改变,即json可能需要在情况“d”中添加,但函数存在,所以不知道如何更新上述内容。
通常在c#中我会使用字典,因此键将是“a”,值将是具有属性xvalue,yvalue,text或value的对象将是字符串“this.tooltip(xvalue,yvalue,text); ”。 这样我可以更新字典,无论有多少元素,'DisplayToolTip'的执行速度都会相对相同。
如何使用javascript中的字符串值创建索引或快速找到的对象数组?
答案 0 :(得分:2)
javascript中的对象就像词典。
var dictionary = {
a : ["xvalue","yvalue","text1"],
b : ["xvalue","yvalue","text2"]
}
console.log(dictionary["b"][2]); // will give you text2.
编辑:更新了包含数组的答案(因为这就是问题所在)。
答案 1 :(得分:0)
您可以使用switch
语句本身,使用fall-through:
switch (str) {
case "a": case "b": case "c":
this.tooltip(xvalue,yvalue,text);
break;
default: break;
}
(但是,正如Qantas评论的那样,这里不需要default
案例。)
或者,浏览器支持它,您可以使用数组的indexOf
方法:
if (["a", "b", "c"].indexOf(str)) ...
答案 2 :(得分:0)
你可以使用字典,女巫基本上是一个普通的对象。 Javascript允许您通过字符串访问对象属性,就像访问数组属性一样:
var obj = {
test: 'text',
b: 4
}
console.log(obj['test'], obj.test);
console.log(obj['b'], obj.b);
所以你的代码看起来像这样:
var pairs = {
'a': {
xvalue: 1,
yvalue: 1,
text: '1111'
},
'b': {
xvalue: 2,
yvalue: 2,
text: '2222'
}
};
function DisplayToolTip(str) {
var prop = pairs[str];
if (typeof prop !== 'undefined')
return this.tooltip(prop.xvalue, prop.yvalue, prop.text);
throw 'undefined prop ' + str;
}
答案 3 :(得分:0)
我会做这样的事情:
var tooltipSettings={
a: {xvalue: 1, yvalue: 1, text: 'string a'},
b: {xvalue: 2, yvalue: 2, text: 'string b'},
c: {xvalue: 3, yvalue: 3, text: 'string c'}
};
function DisplayToolTip(str) {
if(tooltipSettings[str])
{
var settings=tooltipSettings[str];
this.tooltip(settings.xvalue, settings.yvalue, settings.text);
}
}