我正在向用户灌输他们的技能:
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的技能,我做了以下工作:
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进行匹配,但最终得到名称。
怎么做?
更新
为了更好地解释我想要的是什么,我增加了一个例子:
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#' }
]
},因此,我想重新排序每一个用户的技能,以便同样出现在项目技能上的技能将首先出现。这样,用户就会变成:
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' }
]
},
];查看在这两种情况下,项目上出现的技能是如何在每个用户中提升的。
发布于 2020-02-21 17:47:52
我不太确定我是否能理解,但我做了这个样本,可以完全符合您的需要:
此代码只根据用户与项目技能匹配的技能(数组)对所有用户进行排序;
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);https://stackoverflow.com/questions/60342934
复制相似问题