使用枚举引用获取正确的数组值
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
说清楚,我知道我要的数据是primary
、secondary
、tertiary
等的第一个属性,那不是一个空数组,其中 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));
我有一个对象,其中一些属性包含数组,如下所示:
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
说清楚,我知道我要的数据是primary
、secondary
、tertiary
等的第一个属性,那不是一个空数组,其中 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));