// это входные данные. необходимо повторить технологическое имя из объекта
let obj=[
{
name:"Nithesh",
tech:["HTML","CSS","JAVA","JS"],
},
{
name:"hari",
tech:["NodeJS","CSS","React","JS"],
},
{
name:"sathish",
tech:["Angular","CSS","React","HTML"],
}
]
//и выводим вот так. но я перепробовал все способы, но код не работает
o/p = {
"HTML":["Nithesh","sathish"],
"CSS":["Nithesh","hari", "sathish"],
"JS":["Nithesh","hari"],
"React":["hari", "sathish"],
"NodeJs":["hari"],
"Angular":["sathish"],
"JAVA":["Nithesh"],
}
вложенный цикл и проверьте, существует ли ключ alraey в объекте. если нет, установите ключ с пустым массивом и введите имя. если существует, напрямую нажмите имя
Какой код не работает? Добавьте попытку кода в вопрос.
Перебирайте внешний и внутренний массивы, чтобы найти нужные пары, а затем создайте новое свойство в объекте результата на случай, если вы найдете новый язык (в tech
), и всегда добавляйте текущий name
к массиву, который у вас есть для этого свойства. :
// Your example input:
const arr=[{name:"Nithesh",tech:["HTML","CSS","JAVA","JS"],},{name:"hari",tech:["NodeJS","CSS","React","JS"],},{name:"sathish",tech:["Angular","CSS","React","HTML"],}];
const result = {};
for (const {name, tech} of arr) {
for (const lang of tech) (result[lang] ??= []).push(name);
}
console.info(result);
круто .это работает. Спасибо за ваши усилия
Вы можете попробовать это.
// Define the input array of objects
let obj = [
{
name: "Nithesh",
tech: ["HTML", "CSS", "JAVA", "JS"],
},
{
name: "hari",
tech: ["NodeJS", "CSS", "React", "JS"],
},
{
name: "sathish",
tech: ["Angular", "CSS", "React", "HTML"],
}
];
// Initialize an empty output object
let output = {};
// Iterate over each object in the input array
obj.forEach(person => {
// Iterate over each technology in the current person's tech array
person.tech.forEach(tech => {
// Check if the technology is already a key in the output object
if (!output[tech]) {
// If not, create a new array for this technology
output[tech] = [];
}
// Add the person's name to the array for this technology
output[tech].push(person.name);
});
});
// Print the output object to the console
console.info(output);
круто .это работает. Спасибо за ваши усилия
Я бы сделал это с помощью Set, Flat, уменьшить, фильтровать, отображать и включать. Set — это оптимизация, позволяющая избежать повторения повторяющихся языков.
const obj = [
{
name: "Nithesh",
tech: ["HTML", "CSS", "JAVA", "JS"],
},
{
name: "hari",
tech: ["NodeJS", "CSS", "React", "JS"],
},
{
name: "sathish",
tech: ["Angular", "CSS", "React", "HTML"],
},
];
const res = [...new Set(obj.map((item) => item.tech).flat())].reduce(
(acc = {}, item, index) => {
acc[item] = obj
.filter((personData) => personData.tech.includes(item))
.map((personData) => personData.name);
return acc;
},
{}
);
console.info(res);
круто .это работает. Спасибо за ваши усилия
Пожалуйста, отредактируйте свой вопрос, чтобы предоставить более подробную информацию о том, чего вы ожидали, а не о том, что произошло на самом деле. Это поможет читателям понять, что не сработало и как соответствующим образом ответить на ваш вопрос.