我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组
我有一个类似于此的对象
const list = {
jhon: ['js', 'java'],
sara: ['js', 'python'],
andy: ['ruby', 'js', 'java'],
sean: ['python', 'ruby']
}
我必须修改它才能显示此内容
newList = {
js: ['jhon', 'sara', 'andy'],
java: ['jhon', 'andy'],
ruby: ['andy', 'sean'],
python: ['sean', 'sara']
}
我尝试了很多方法都没有成功,预先感谢您的帮助
解决方案
您可以使用Object.entries、reduce和forEach轻松实现此结果。
因为Object.entries
将返回[key, value]
的数组。然后,在Reduce中,您可以使用forEach设置对象的属性(在本例中为acc
)。
const list = {
jhon: ["js", "java"],
sara: ["js", "python"],
andy: ["ruby", "js", "java"],
sean: ["python", "ruby"],
};
const result = Object.entries(list).reduce((acc, curr) => {
const [key, values] = curr;
values.forEach((lang) => {
if (acc[lang]) acc[lang].push(key);
else acc[lang] = [key];
});
return acc;
}, {});
console.log(result);
您可以使上面的代码简洁
const list = {
jhon: ["js", "java"],
sara: ["js", "python"],
andy: ["ruby", "js", "java"],
sean: ["python", "ruby"],
};
const result = Object.entries(list).reduce((acc, [key, values]) => {
values.forEach((lang) => (acc[lang] = [...(acc[lang] ?? []), key]));
return acc;
}, {});
console.log(result);
相关文章