Search code examples
javascriptenumerate

How to have an object key depend on another key in the same object?


I have a very simple function that builds an object and logs it.

One of the keys in the object should be depending on another key.

I think it would be much clearer when I add the code

module.exports = function (information) {

    var numObj = {
        [-1]: "accepted",
        [0]: "fail",
        [1]: "success"
    }
    console.log(numObj)

    var ip = require('ip');
        var logObj = {
            UUID: information.UUID, // get from outside
            FN_TIME_STAMP: information.FN_TIME_STAMP, // not sure if necessary
            FN_CORRELATION_ID: information.FN_CORRELATION_ID,// get from outside
            FN_REF_ID: information.FN_REF_ID, //get from outside
            FN_METHOD_NAME: "docToMail", // constant
            FN_STATUS_CODE: information.FN_STATUS_CODE, //get from outside
            FN_STATUS_DESC: numObj[this.FN_STATUS_CODE], // depends on FN_STATUS_CODE
            FN_DOC_ID: information.FN_DOC_ID, //get from outside
            FN_USER_NAME: "", // empty for now, probably un-necessary
            FN_APP_ID: information.FN_APP_ID, //get from outside
            FN_RMT_ADDRS: ip.address(),//ip address of local machine
            FN_NUM_OF_RETRIES: information.FN_NUM_OF_RETRIES, // get from outside
            FN_FILETYPE: information.FN_FILETYPE, // get from outside
            FN_REC_STATE: numObj[this.FN_STATUS_CODE] //depends on FN_STATUS_CODE
        }
        console.log(logObj)
}

I just want FN_REC_STATE and FN_STATUS_DESC to be a string depending on FN_STATUS CODE. If its -1 i want the string to be "accepted" If its 0 i want the string to be "fail" If its 1 i want the string to be "success"

as it as right now i just get undefined, please help!

Thanks


Solution

  • Assuming that information.FN_STATUS_CODE is either -1, 0 or 1, the following solution should work.

    If you change

    FN_REC_STATE: numObj[this.FN_STATUS_CODE]
    

    to

    FN_REC_STATE: numObj[information.FN_STATUS_CODE]
    

    then it should put the correct value into FN_REC_STATE.

    This is because by the time that faulty line is evaluated, this.FN_STATUS_CODE hasn't been defined.

    You should also change this for the definition of FN_STATUS_DESC.

    Also, it looks like you may be misunderstanding what this refers to in the context of that function. It actually refers to the global object, rather than the logObj object.