1

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?

1 Answer 1

1

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

Sign up to request clarification or add additional context in comments.

2 Comments

I can't change ORDER itself, because that enums object is being used elsewhere. I would need to generate an array from the enums object.
Sorry, you didn't mention that in your question. Updated my answer accordingly.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.