Estoy aprendiendo a codificar y practicando, así que tengo estas dos funciones
const getUsers = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve([ { id: 1, name: 'Antonio', gender: 'male', status: 'active', salary: 1000 }, { id: 2, name: 'Rosa', gender: 'female', status: 'active', salary: 1000 }, { id: 3, name: 'Joseph', gender: 'male', status: 'inactive', salary: 2000 }, { id: 4, name: 'Lisa', gender: 'female', status: 'active', salary: 2000 }, { id: 5, name: 'Gwen', gender: 'female', status: 'inactive', salary: 3000 }, { id: 6, name: 'Antonio', gender: 'male', status: 'inactive', salary: 3000 } ]); }, 1000); }); } const getCompanies = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve([ { id: 1, name: 'Disney', employees: [1, 3], status: 'inactive' }, { id: 2, name: 'Nestle', employees: [4], status: 'active' }, { id: 3, name: 'Microsoft', employees: [2, 5, 6], status: 'active' } ]); }, 3000); }); }Según las funciones anteriores, ¿cómo puedo crear una función para que los datos de las empresas se llenen con los datos de los usuarios según la identificación de la matriz de claves de los empleados?
ejemplo de respuesta:
[ { id: 1... { id: 2, name: Nestle, employees: [ { id: 4, name: 'Lisa', gender: 'female', status: 'active', salary: 2000 } ], status: 'active' } { id: 3... ]Puede crear una función auxiliar para fusionar los datos.
El fragmento a continuación debería funcionar para usted
const getUsers = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve([ { id: 1, name: 'Antonio', gender: 'male', status: 'active', salary: 1000 }, { id: 2, name: 'Rosa', gender: 'female', status: 'active', salary: 1000 }, { id: 3, name: 'Joseph', gender: 'male', status: 'inactive', salary: 2000 }, { id: 4, name: 'Lisa', gender: 'female', status: 'active', salary: 2000 }, { id: 5, name: 'Gwen', gender: 'female', status: 'inactive', salary: 3000 }, { id: 6, name: 'Antonio', gender: 'male', status: 'inactive', salary: 3000 }, ]); }, 1000); }); }; const getCompanies = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve([ { id: 1, name: 'Disney', employees: [1, 3], status: 'inactive' }, { id: 2, name: 'Nestle', employees: [4], status: 'active' }, { id: 3, name: 'Microsoft', employees: [2, 5, 6], status: 'active' }, ]); }, 3000); }); }; // Merge and populate data const mergeData = (users, companies) => { return companies.map((company) => { const employees = users.filter((user) => company.employees.includes(user.id)); return { ...company, employees }; }); }; (async () => { console.log('Running...'); // Just a async context const users = await getUsers(); const companies = await getCompanies(); const mergedData = mergeData(users, companies); console.log(mergedData); })();Lo haría así, pero seguro que hay 1000 formas de hacerlo.
const employeesData = [ { id: 1, name: "Antonio", gender: "male", status: "active", salary: 1000 }, { id: 2, name: "Rosa", gender: "female", status: "active", salary: 1000 }, { id: 3, name: "Joseph", gender: "male", status: "inactive", salary: 2000 }, { id: 4, name: "Lisa", gender: "female", status: "active", salary: 2000 }, { id: 5, name: "Gwen", gender: "female", status: "inactive", salary: 3000 }, { id: 6, name: "Antonio", gender: "male", status: "inactive", salary: 3000 }, ]; const companyData = [ { id: 1, name: "Disney", employees: [1, 3], status: "inactive" }, { id: 2, name: "Nestle", employees: [4], status: "active" }, { id: 3, name: "Microsoft", employees: [2, 5, 6], status: "active" }, ]; const fill = (employees, compenies) => { return compenies.map((company) => { company.employees = company.employees.map((id) => employees[id - 1]); return company; }); }; const merge = fill(employeesData, companyData); console.log(JSON.stringify(merge, null, 2));