我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组

I have an object with some names as keys, each key has an array of skills, I have to return a new object with skills as new keys and old keys as array(我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组) - IT屋-程序

本文介绍了我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类似于此的对象

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);

这篇关于我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组