Фильтр на основе массива по методу объекта в JavaScript

// это входные данные. необходимо повторить технологическое имя из объекта

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"],
    }

Пожалуйста, отредактируйте свой вопрос, чтобы предоставить более подробную информацию о том, чего вы ожидали, а не о том, что произошло на самом деле. Это поможет читателям понять, что не сработало и как соответствующим образом ответить на ваш вопрос.

Adam Basha 13.07.2024 16:00

вложенный цикл и проверьте, существует ли ключ alraey в объекте. если нет, установите ключ с пустым массивом и введите имя. если существует, напрямую нажмите имя

cmgchess 13.07.2024 16:03

Какой код не работает? Добавьте попытку кода в вопрос.

Paul T. 13.07.2024 16:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Перебирайте внешний и внутренний массивы, чтобы найти нужные пары, а затем создайте новое свойство в объекте результата на случай, если вы найдете новый язык (в 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);

круто .это работает. Спасибо за ваши усилия

Paul Mohamed Fazil I 23.07.2024 03:37
Ответ принят как подходящий

Вы можете попробовать это.

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

круто .это работает. Спасибо за ваши усилия

Paul Mohamed Fazil I 23.07.2024 03:36

Я бы сделал это с помощью 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);

круто .это работает. Спасибо за ваши усилия

Paul Mohamed Fazil I 23.07.2024 03:37

Другие вопросы по теме