使用枚举引用获取正确的数组值

Using Enum References to Get Right Array Value

我有一个对象,其中一些属性包含数组,如下所示:

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

为了找到正确的,我可以做一些不太优雅的事情,像这样:

  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",
  },
};

虽然这行得通,但我更愿意做的是像这样更简洁的事情:

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

我在其他地方看到过这样做。但是,我不清楚的是我可以在这一行中放入什么,以获得正确的数组引用:

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

说清楚,我知道我要的数据是primarysecondarytertiary等的第一个属性,那不是一个空数组,其中 coverage.purchaser.name !== 'customer'.

根据上面的数据,我可以用什么来提取这个?

您可以使用一个简单的数组作为顺序表示。它可以使用 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));