如何解决我有一个对象,有一些名字作为键,每个键都有一个技能数组,我必须返回一个新对象,技能作为新键,旧键作为数组
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.entries、reduce 和 forEach 轻松实现此结果。
因为 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]);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。