Home > Net >  Using Enum References to Get Right Array Value
Using Enum References to Get Right Array Value

Time:10-07

I have a situation where I have an object where some of the properties contain arrays like so:

current: {
    primary: [ [Object] ],
    secondary: [ [Object] ],
    tertiary: [],
    quaternary: [],
    quinary: [],
    senary: [],
    septenary: [],
    octonary: [],
    nonary: [],
    denary: []
},

To find the correct one, I could do something not very elegant, like this:

  getLastActive = (current) => {
    let lastActive;
    if(current.primary[0] && current.primary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.primary[0];
    } else if(current.secondary[0] && current.secondary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.secondary[0];
    } else if(current.tertiary[0] && current.tertiary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.tertiary[0];
    } else if(current.quaternary[0] && current.quaternary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.quaternary[0];
    } else if(current.senary[0] && current.senary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.senary[0];
    } else if(current.septenary[0] && current.septenary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.septenary[0];
    } else if(current.octonary[0] && current.octonary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.octonary[0];
    } else if(current.nonary[0] && current.nonary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.nonary[0];
    } else if(current.denary[0] && current.denary[0].coverage.purchaser.name !== 'customer') {
      lastActive = current.denary[0];
    }
    return lastActive;
  }

const enums = {
  ORDER: {
    1: "primary",
    2: "secondary",
    3: "tertiary",
    4: "quaternary",
    5: "quinary",
    6: "senary",
    7: "septenary",
    8: "octonary",
    9: "nonary",
    10: "denary",
  },
};

While that works, what I'd prefer to do is something more succinct like this:

  getLastActive = (current) => {
    let lastActive;
    let sequence = enums.ORDER['some value']; // Not sure what goes here
    if(current[enums.ORDER[sequence]][0].coverage.purchaser.name !== 'customer') {
      lastActiveCommercial = current[enums.ORDER[sequence]][0];
    }
    return lastActive;
  }

I've seen this done elsewhere. However, what I'm unclear on is what I can put in this line, to get the right array reference:

    let sequence = enums.ORDER['some value']; // Not sure what goes here

To be clear, I know that the data I want is the first property of primary, secondary, tertiary, etc., that is not an empty array, and where coverage.purchaser.name !== 'customer'.

What can I use to pull this out based on the data above?

CodePudding user response:

You could use a simple array as order representation. It can be created from the enum definition using Object.values(enums.ORDER).

const current = {
    primary: [{
      coverage: {
        purchaser: {
          name: 'customer'
        }
      }
    }],
    secondary: [{
      coverage: {
        purchaser: {
          name: 'purchaser'
        }
      }
    }],
    tertiary: [],
    quaternary: [],
    quinary: [],
    senary: [],
    septenary: [],
    octonary: [],
    nonary: [],
    denary: []
};


const enums = {
  ORDER: {
    1: "primary",
    2: "secondary",
    3: "tertiary",
    4: "quaternary",
    5: "quinary",
    6: "senary",
    7: "septenary",
    8: "octonary",
    9: "nonary",
    10: "denary",
  }
};

function getLastActive(current) {
  let lastActive;

  const ORDER = Object.values(enums.ORDER);
  for (const order of ORDER) {
    const item = current[order][0];
    if (item && item.coverage.purchaser.name !== "customer") {
      lastActive = item;
      break;
    }
  }
  return lastActive;
}

console.log(JSON.stringify(getLastActive(current), null, 2));

  • Related