1

我有以下要针对我的网络应用程序优化的 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 可能需要在 case "d" 中添加,但该函数存在,所以不知道如何更新上述内容。

通常在 c# 中我会使用字典,所以键是“a”,值是具有属性 xvalue、yvalue、text 的对象,或者值是字符串“this.tooltip(xvalue,yvalue,text);”。这样我可以更新字典,并且无论有多少元素,“DisplayToolTip”的执行速度都会相对相同。

如何使用 javascript 中的字符串值创建索引或快速找到的对象数组?

4

4 回答 4

2

javascript 中的对象就像字典。

var dictionary = {
    a : ["xvalue","yvalue","text1"],
    b : ["xvalue","yvalue","text2"]
}

console.log(dictionary["b"][2]); // will give you text2.

演示

编辑:更新了包含数组的答案(这就是问题所在)。

于 2013-10-26T09:15:55.783 回答
0

您可以使用switch语句本身,并通过以下方式:

switch (str) {
    case "a": case "b": case "c": 
        this.tooltip(xvalue,yvalue,text);
        break;
    default: break;
}

(但是,正如澳航评论的那样,default这里不需要这个案例。)

或者,如果浏览器支持,可以使用indexOf数组的方法:

if (["a", "b", "c"].indexOf(str)) ...
于 2013-10-26T09:14:18.747 回答
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;
}
于 2013-10-26T09:17:42.730 回答
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);
    }
}
于 2013-10-26T09:19:45.757 回答