如何使用枚举定义另一个枚举

How to use an enum to define another enum?

本文关键字:枚举 另一个 定义 何使用      更新时间:2023-09-26

我在JavaScript中定义了以下枚举

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

现在我想为文档类"invoice"answers"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();
}

这应该做到:

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();
}