首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方法来写这个javascript?

有没有更好的方法来写这个javascript?
EN

Stack Overflow用户
提问于 2011-09-09 10:40:03
回答 3查看 102关注 0票数 0

有没有更好的方法来编写这个JavaScript?

代码语言:javascript
复制
switch (l) {
    //A
    case '1-1-1':
    case '1-1-2':
    case '1-2-1':
    case '2-1-1':
    case '3-1-1':
        obj.result = 'A';
        break;
    //B
    case '1-2-2':
    case '1-2-3':
    case '2-2-2':
    case '2-2-3':
    case '3-2-2':
    case '3-3-1':
        obj.result = 'B';
        break;
    //C
    case '1-3-2':
    case '1-3-3':
    case '2-3-2':
    case '3-2-3':
        obj.result = 'C';
        break;
    //D
    case '3-3-2':
    case '3-3-3':
        obj.result = 'D';
        break;
    default:
        obj.result = 'AA';
        break;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 10:59:21

Thilo在评论中提到的查找表:

代码语言:javascript
复制
var lookup =
{
    '1-1-1': 'A',
    '1-1-2': 'A',
    '1-2-1': 'A',
    '2-1-1': 'A',
    '3-1-1': 'A',

    '1-2-2': 'B',
    '1-2-3': 'B',
    '2-2-2': 'B',
    '2-2-3': 'B',
    '3-2-2': 'B',
    '3-3-1': 'B',

    '1-3-2': 'C',
    '1-3-3': 'C',
    '2-3-2': 'C',
    '3-2-3': 'C',
    '3-3-2': 'C',

    '3-3-3': 'D'
};

以及它的用法:

代码语言:javascript
复制
obj.result = lookup[l] || 'AA';

我不能说这真的比switch版本更好。

票数 1
EN

Stack Overflow用户

发布于 2011-09-09 10:49:44

如果你告诉我们你是如何得到这些值的,我们可能会想出一个更简洁的解决方案,但下面是你如何使用查找表(向后生成):

代码语言:javascript
复制
var byResult={
    A: ['1-1-1', '1-1-2', /* ... */],
    B: ['1-2-2', '1-2-3', /* ... */],
    /* ... */
};
var byInput={};
for(var output in byResult) {
    if(!Object.prototype.hasOwnProperty.call(byResult, output)) {
        continue;
    }
    var inputs=byResult[output];
    for(var i=0, l=inputs.length; i<l; i++) {
        var input=inputs[i];
        byInput[input]=output;
    }
}
function lookup(value) {
    if(Object.prototype.hasOwnProperty.call(byInput, value)) {
        return byInput[value];
    }else{
        return 'AA';
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-09-09 11:16:45

将数字到字母的处理封装在一个函数中,这样您的主代码就不需要知道转换是如何完成的。这样叫它:

代码语言:javascript
复制
obj.result = getThing(l);

// or, given your comment that l is formed by concatenating three
// values you could do the concatenation in the function
obj.result = getThing(v1, v2, v3);

然后,在getThing()中,您可以使用现有的switch语句,或者Matt Ball答案中的查找表,或者您喜欢的任何其他方法。而且,您可以随时更改该方法,而不会影响调用该函数的代码。

代码语言:javascript
复制
function getThing(v1, v2, v3) {
   var l = v1 + "-" + v2 + "-" + v3;
   // use lookup, switch, whatever
   return "somecode";
}

注意:不要实际调用您的函数"getThing";将"Thing“替换为描述这些字母代码的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7356605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档