按字符串索引的 Javascript 数组

Javascript array indexed by string

本文关键字:Javascript 数组 索引 字符串      更新时间:2023-09-26

我有以下JavaScript函数,我想为我的Web应用程序进行优化。

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 的对象,或者值将是字符串"this.tooltip(xvalue,yvalue,text);"。这样我就可以更新字典,无论有多少元素,"显示工具提示"的执行速度都相对相同。

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

JavaScript 中的对象就像字典。

var dictionary = {
    a : ["xvalue","yvalue","text1"],
    b : ["xvalue","yvalue","text2"]
}
console.log(dictionary["b"][2]); // will give you text2.

演示

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

您可以使用

switch 语句本身,并带有fallthrough:

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

(但是,正如澳航评论的那样,这里没有必要default案例。

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

if (["a", "b", "c"].indexOf(str)) ...

我会做这样的事情:

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);
    }
}
你可以

使用字典,女巫基本上是一个普通的对象。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;
}