【问题标题】:How to use an enum to define another enum?如何使用一个枚举来定义另一个枚举?
【发布时间】:2013-07-24 10:30:23
【问题描述】:

我在 JavaScript 中定义了以下枚举:

/**
 * Represents the document type.
 * 
 * @enum
 */
var DOCUMENT_TYPE = {
    TC_INVOICE: 1,
    TC_CREDIT_NOTE: 2,
    OFFHIRE_INVOICE: 3,
    OFFHIRE_CREDIT_NOTE: 4
}

现在我想为文档类“invoice”和“credit note”定义另一个枚举。我试过这样的东西。:

/**
* Represents the document class ("invoice" or "credit note").
* 
* @enum
*/
var DOCUMENT_CLASS = {
    INVOICE: {
        1: DOCUMENT_TYPE.TC_INVOICE,
        3: DOCUMENT_TYPE.OFFHIRE_INVOICE
    },
    CREDIT_NOTE: {
        2: DOCUMENT_TYPE.TC_CREDIT_NOTE,
        4: DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE
    }
}

数据库列保存文档类型的值(可能的整数值:1、2、3、4)。现在我想检查它是发票还是贷方票据,例如:

if ( DOCUMENT_CLASS.INVOICE ) {
    doSomething();
} else if ( DOCUMENT_CLASS.CREDIT_NOTE ) {
    doSomeOtherThing();
}

【问题讨论】:

    标签: javascript enums


    【解决方案1】:

    应该这样做:

    if (DOCUMENT_CLASS.INVOICE[column]) {
        doSometjing();
    } else if (DOCUMENT_CLASS.CREDIT_NOTE[column]) {
        doSomeOtherThing();
    }
    

    column 是一个变量,用于保存您要检查的数据库列中的值。

    另一种方法是制作文档类数组:

    var DOCUMENT_CLASS = {
        INVOICE: [ DOCUMENT_TYPE.TC_INVOICE, DOCUMENT_TYPE.OFFHIRE_INVOICE ],
        CREDIT_NOTE: [ DOCUMENT_TYPE.TC_CREDIT_NOTE, DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE ]
    };
    

    然后你会写:

    if (DOCUMENT_TYPE.INVOICE.indexOf(column) != -1) {
        doSomething();
    } else if (DOCUMENT_TYPE.CREDIT_NOTE.indexOf(column) != -1) {
        doSomeOtherThing();
    }
    

    【讨论】:

    • 所以如果我想知道它是否是发票,我必须检查DOCUMENT_CLASS.INVOICE[1]DOCUMENT_CLASS.INVOICE[3]
    • DOCUMENT_CLASS.INVOICE 是一个对象,而不是一个整数;它有两个键,1 和 3。您不必同时检查两者,只需检查给定的值;如果存在,则为发票。
    • 谢谢,DOCUMENT_CLASS.INVOICE[columnDataProvider] 有效,但有更好的解决方案吗,我可以咨询if ( DOCUMENT_CLASS.INVOICE )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多