由字符串索引的Javascript数组

时间:2013-10-26 09:09:18

标签: javascript

我有以下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中的字符串值创建索引或快速找到的对象数组?

4 个答案:

答案 0 :(得分:2)

javascript中的对象就像词典。

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

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

Demo

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

答案 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);
    }
}
相关问题