首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序数组,首先显示另一个数组共有的项。

排序数组,首先显示另一个数组共有的项。
EN

Stack Overflow用户
提问于 2020-02-21 16:40:25
回答 1查看 71关注 0票数 0

我正在向用户灌输他们的技能:

代码语言:javascript
复制
let users: Observable<UserModel[]> this.userService.getOpen().pipe(

  map((payload: Payload<UserResponse[]>) => 

  payload.result.map((response: UserResponse) => { 

    return {
      userId: response.userId, 
      skillsNames: response.skills.map((skill: SkillModel) => skill.name)
    };

  })));

我需要对skillsNames进行排序,首先显示项目中常见的部分。

为了掌握project的技能,我做了以下工作:

代码语言:javascript
复制
let skills: Observable<SkillModel[]> = this.skillService.getByProjectId(id).pipe(

  map((payload: Payload<SkillResponse[]>) => 

    payload.result.map((response: SkillResponse) => { 

      return {
        skillId: response.skillId, 
        name: response.name
      };

    })));

我还可以通过用户的SkillModel和项目的SkillModel通过skillId进行匹配,但最终得到名称。

怎么做?

更新

为了更好地解释我想要的是什么,我增加了一个例子:

代码语言:javascript
复制
let users = [
  { 
    userId: 1,
    skills: [
      { Id: 1, name: 'Javascript' },
      { Id: 2, name: 'CSS' }
    ]
  },
  { 
    userId: 2,
    skills: [
      { Id: 1, name: 'Javascript' },
      { Id: 2, name: 'CSS' }
      { Id: 3, name: 'C#' }
    ]
  },
];

let project = { 
    projectId: 1,
    skills: [
      { Id: 2, name: 'CSS' },
      { Id: 3, name: 'C#' }
    ]
  },

因此,我想重新排序每一个用户的技能,以便同样出现在项目技能上的技能将首先出现。这样,用户就会变成:

代码语言:javascript
复制
let users = [
  { 
    userId: 1,
    skills: [
      { Id: 2, name: 'CSS' },
      { Id: 1, name: 'Javascript' }
    ]
  },
  { 
    userId: 2,
    skills: [
      { Id: 2, name: 'CSS' }
      { Id: 3, name: 'C#' }
      { Id: 1, name: 'Javascript' }
    ]
  },
];

查看在这两种情况下,项目上出现的技能是如何在每个用户中提升的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 17:47:52

我不太确定我是否能理解,但我做了这个样本,可以完全符合您的需要:

此代码只根据用户与项目技能匹配的技能(数组)对所有用户进行排序;

代码语言:javascript
复制
 const users = [
  {
    userId: 1,
    skillsNames: ['JAVA', 'PHP', 'RUBY', 'R']
  },
  {
    userId: 2,
    skillsNames: ['LISP', 'TYPESCRIPT', 'C', 'DOTNET']
  },
  {
    userId: 3,
    skillsNames: ['C#', 'C++', 'VRAPTOR', 'R']
  },
  {
    userId: 4,
    skillsNames: ['LISP', 'RUBY', 'R', 'DOTNET']
  },
];

const skills = ['JAVA', 'PHP', 'RUBY', 'R'];



const userWithSortedSkills = users.map(u => {
   const sortedSkillsName = u.skillsNames.sort(name => {
       return skills.lastIndexOf(name) ? 1 : -1;     
   });

   u.skillsNames = sortedSkillsName;

   return u;
});

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

https://stackoverflow.com/questions/60342934

复制
相关文章

相似问题

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