我正在试图解决我的JS中的一个问题,它与下面的片段有关
const signatureOrder = role => {
let order;
switch (role) {
case 'GUARDIAN':
order = 2;
break;
case 'ASSENTEE':
order = 3;
break;
case 'COUNTERSIGNEE':
order = 4;
break;
default:
order = 1;
break;
}
return order;
};这个方法基本上扮演的角色是4: CONSENTEE、CONSENTEE、ASSENTEE、COUNTERSIGNEE。
CONSENTEE总是1,顺序总是从1到5的数字。
然而,有一种情况是,我可能会有多个角色出现:
1 consented
2 guardians
2 assentee
1 countersignee该方法将按以下顺序进行翻译
1 consented
2 Guardian
2 Guardian
3 Assentee
3 Assentee
4 Countersignee 这不是很正确,输出应该是单个值的增量,但将顺序固定如下:
1 Consented
2 Guardian
3 Guardian
4 Assentee
5 Assentee
6 Countersignee所以,如果我们已经有了一个守护者,下一个守护者就变成了前一个守护者+1,但是总是在同意之后和阿森提之前。
情景领域:
H 113我们可以已经有了这个角色的列表,如果我们有c1,G2,A3,我们可以添加守护者,我们在任何地方都会改变+ 1,这样就会有c1,G2,G3,A4……H 214/code>F 215
我想了解如何以正确的方式解决这一问题。
发布于 2021-10-12 14:38:56
在我看来,你需要这样的东西:
const sortRoles = rolesArray => {
const orderOfRole = {
'CONSENTED': 1,
'GUARDIAN': 2,
'ASSENTEE': 3,
'COUNTERSIGNEE': 4
}
rolesArray.sort((role1, role2) => orderOfRole[role1] - orderOfRole[role2])
}最后,顺序只是排序数组中的索引,递增1:
roles = ['GUARDIAN', 'ASSENTEE', 'ASSENTEE', 'CONSENTED']
sortRoles(roles)
roles.map((role, index) => console.log(`${index + 1}: ${role}`))
// 1: CONSENTED
// 2: GUARDIAN
// 3: ASSENTEE
// 4: ASSENTEE您可以将其扩展到角色的对象,而不是字符串。在这种情况下,您只需要从sort()的比较函数中的对象中提取字符串,并像上面那样使用它。
发布于 2021-10-12 14:30:10
您可以基于orderArray对所有元素进行排序。然后,根据元素索引分配顺序。
const orderArray = ['CONSENTEE', 'GUARDIAN', 'ASSENTEE', 'COUNTERSIGNEE']
const elements = ['CONSENTEE', 'ASSENTEE', 'GUARDIAN', 'COUNTERSIGNEE', 'ASSENTEE', 'GUARDIAN']
elements.sort(function(a, b){
return orderArray.indexOf(a) - orderArray.indexOf(b);
});
const withOrder = elements.map((el, i) => {
return {role: el, order: i+1}
})
console.log(withOrder)
https://stackoverflow.com/questions/69542157
复制相似问题