首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决JS逻辑问题,其中一些值必须根据先前的值递增,始终保持特定的顺序。

如何解决JS逻辑问题,其中一些值必须根据先前的值递增,始终保持特定的顺序。
EN

Stack Overflow用户
提问于 2021-10-12 14:15:53
回答 2查看 65关注 0票数 1

我正在试图解决我的JS中的一个问题,它与下面的片段有关

代码语言:javascript
复制
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的数字。

然而,有一种情况是,我可能会有多个角色出现:

代码语言:javascript
复制
1 consented 
2 guardians
2 assentee
1 countersignee

该方法将按以下顺序进行翻译

代码语言:javascript
复制
1 consented
2 Guardian
2 Guardian
3 Assentee
3 Assentee 
4 Countersignee 

这不是很正确,输出应该是单个值的增量,但将顺序固定如下:

代码语言:javascript
复制
1 Consented
2 Guardian
3 Guardian
4 Assentee
5 Assentee
6 Countersignee

所以,如果我们已经有了一个守护者,下一个守护者就变成了前一个守护者+1,但是总是在同意之后和阿森提之前。

情景领域:

  • consentee是一个始终都有1
  • 的角色,我们总是有4个角色
  • ,但是我们可以有不同的组合,如无监护人、无授权人、是的加签名等
  • ,总是在场的角色是同意的,其他角色是否存在取决于情况,

H 113我们可以已经有了这个角色的列表,如果我们有c1,G2,A3,我们可以添加守护者,我们在任何地方都会改变+ 1,这样就会有c1,G2,G3,A4……H 214/code>F 215

我想了解如何以正确的方式解决这一问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-12 14:38:56

在我看来,你需要这样的东西:

代码语言:javascript
复制
const sortRoles = rolesArray => {
    const orderOfRole = {
        'CONSENTED': 1,
        'GUARDIAN': 2,
        'ASSENTEE': 3,
        'COUNTERSIGNEE': 4
    }
    rolesArray.sort((role1, role2) => orderOfRole[role1] - orderOfRole[role2])
}

最后,顺序只是排序数组中的索引,递增1:

代码语言:javascript
复制
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()的比较函数中的对象中提取字符串,并像上面那样使用它。

票数 1
EN

Stack Overflow用户

发布于 2021-10-12 14:30:10

您可以基于orderArray对所有元素进行排序。然后,根据元素索引分配顺序。

基于this answer

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69542157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档