Javascript 按技能对对象排序
因此,我在一篇文章中发现了一个问题(找不到链接,否则我会找到解决方案),该文章提出了以下问题 给定一些用户数据,按技能对用户进行排序。以下是数据Javascript 按技能对对象排序,javascript,Javascript,因此,我在一篇文章中发现了一个问题(找不到链接,否则我会找到解决方案),该文章提出了以下问题 给定一些用户数据,按技能对用户进行排序。以下是数据 const namesAndSkills = { // Dev : Skills mark : ["javascript","react","java"], rob : "javascript", patrick : ["javascript", "react", "python"] } Solution(expected
const namesAndSkills = {
// Dev : Skills
mark : ["javascript","react","java"],
rob : "javascript",
patrick : ["javascript", "react", "python"]
}
Solution(expected output):
Javascript: ["mark", "rob", "patrick"],
react: ["mark", "patrick"],
java: mark,
python: patrick
我的解决方案只能将技能与用户分开,但我似乎找不到一种方法将用户与技能进行比较
const数据={
////开发人员:技能
标记:[“javascript”、“react”、“java”],
rob:“javascript”,
帕特里克:[“javascript”、“react”、“python”]
}
函数swapNamesAndSkills(对象){
let data=Object.entries(Object);//正在考虑使用分隔的条目进行比较,但无法正确计算。
//创建一个映射来存储我们的结束键/值
设skillsToNames=newmap();
让skills=[].concat(…Object.values(Object));
for(设i=0;i swapNamesAndSkills(数据)代码>您可以通过减少对象的大小来创建一个新对象。由于value
既可以是字符串也可以是数组,因此可以使用[].concat(value)
获得一系列可循环使用的技能
在向累加器添加技能作为键时,同样的逻辑也适用。如果技能不存在,只需分配acc[skill]=name
。如果密钥已经存在,请使用[].concat(acc[skill],name)
,因为acc[skill]
可以是字符串或数组
const namesAndSkills={
标记:[“javascript”、“react”、“java”],
rob:“javascript”,
帕特里克:[“javascript”、“react”、“python”]
}
const output=Object.entries(namesAndSkills).reduce((acc,[name,value])=>{
[].concat(值).forEach(技能=>{
if(acc[技能])
acc[skill]=[].concat(acc[skill],名称)
其他的
acc[技能]=姓名;
})
返回acc
}, {})
console.log(输出)
另一种解决方案可以是:
const data = {
// // Dev : Skills
mark : ["javascript","react","java"],
rob : "javascript",
patrick : ["javascript", "react", "python"]
}
function swapNamesAndSkills(object) {
let skillsToNames = new Map();
for(let i in data) {
if(data[i] instanceof Array) {
for(let s of data[i]) {
if(!skillsToNames.has(s)) {
skillsToNames.set(s,[]);
}
skillsToNames.get(s).push(i);
}
} else {
if(!skillsToNames.has(data[i])) {
skillsToNames.set(data[i],[]);
}
skillsToNames.get(data[i]).push(i);
}
}
console.log(skillsToNames);
}
swapNamesAndSkills(data);
伙计,非常感谢你。我今天在努力解决这个问题,但遇到了一个障碍。非常干净清晰的解决方案,非常感谢!我把所有的技能都看作是一个阵列。并提出了简单的解决方案
function fun(){
const data = {
// Dev : Skills
mark : ["javascript","react","java"],
rob : "javascript",
patrick : ["javascript", "react", "python"]
}
var skills = [];
Object.keys(data).forEach(key=>{
var skillsList = data[key];
if(typeof skillsList !=="string"){
skillsList.forEach(skill=>{
skills[skill]=[];
});
}else{
skills[skillsList] = [];
}
});
Object.keys(data).forEach(key=>{
var skillsList = data[key];
if(typeof skillsList !=="string"){
skillsList.forEach(skill=>{
if(Object.keys(skills).indexOf(skill)!==-1)
skills[skill].push(key);
});
}else{
if(Object.keys(skills).indexOf(skillsList)!==-1)
skills[skillsList].push(key);
}
});
return skills
}
console.log(fun())
const namesAndSkills = {
mark: ['javascript', 'react', 'java'],
rob: ['javascript'],
patrick: ['javascript', 'react', 'python']
};
function solve(namesAndSkills) {
let skills = [];
for (const [key, value] of Object.entries(namesAndSkills)) {
skills.push.apply(skills, value);
}
skills = [...new Set(skills)];
let skillsAndName = {};
for (const value of skills) {
skillsAndName[value] = [];
for (const [name, skill] of Object.entries(namesAndSkills)) {
if (skill.includes(value)) {
skillsAndName[value].push(name);
}
}
}
console.log(skillsAndName);
}
solve(namesAndSkills);