微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个这样的对象

const list = {
    jhon: ['js','java'],Sara: ['js','python'],andy: ['ruby','js',sean: ['python','ruby']
}

我必须修改它才能显示这个

newList = {
    js: ['jhon','Sara','andy'],java: ['jhon',ruby: ['andy','sean'],python: ['sean','Sara']
}

我尝试了很多方法都没有成功,在此先感谢您的帮助

解决方法

您可以使用 Object.entriesreduceforEach 轻松实现此结果。

因为 Object.entries 将返回一个 [key,value] 数组。然后在reduce 中,您可以使用forEach 设置对象的属性(在本例中为acc)。

const list = {
  jhon: ["js","java"],sara: ["js","python"],andy: ["ruby","js",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",[key,values]) => {
  values.forEach((lang) => (acc[lang] = [...(acc[lang] ?? []),key]));
  return acc;
},{});

console.log(result);

,

您可以为每个键遍历 Object.keys,然后遍历数组以在 result 对象中插入值,即

const initial = {
    jhon: ['js','java'],sara: ['js','python'],andy: ['ruby','js',sean: ['python','ruby']
}

const result = {}

Object.keys(initial).forEach((person) => {
    initial[person].forEach((language) => {
        if (!Array.isArray(result[language])) {
            result[language] = []
        }
        result[language].push(person)
    })
})

console.log(result)

,

我尝试了下面的代码并得到了你想要的结果:

 const list = {
        jhon: ['js','ruby']
    };

    function getPersonsByLanguegs(lang) {
        var result = [];

        for (var a in list) {
            if (list[a].includes(lang))
                result.push(a);
        }
        return result;
    }
    var newList = {};

    for (a in list) {
        if (list[a].length > 0)
            for (var i = 0; i < list[a].length; i++) {
                newList[list[a][i]] = getPersonsByLanguegs(list[a][i]);
            }
    }

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。