const phoneBook = {}; const names = ['Mira', 'Royce', 'Kathie']; const numbers = ['3234958675', '9164059384', '4154958675'] function populate(names, numbers) { for(i = 0; i < populate.length; i++) { phoneBook[names[i]] = numbers[i]; } }¿Cómo puedo hacer que mi ciclo for itere a través de ambas matrices simultáneamente y devuelva nombres como clave y números como valores?
Mayormente tienes la idea correcta.
Dos sugerencias:
numbers.length o names.length como el número de iteracionesUn ejemplo de trabajo sería algo como esto:
const names = ['Mira', 'Royce', 'Kathie']; const numbers = ['3234958675', '9164059384', '4154958675']; function populate(names, numbers) { const phoneBook = {}; for(i = 0; i < names.length; i++) { phoneBook[names[i]] = numbers[i]; } return phoneBook; } const phoneBook = populate(names, numbers);De manera más concisa, comprima las matrices juntas, luego pásela a Object.fromEntries(0
function makePhoneBook(names, numbers) { const entries = names.map((name, i) => [name, numbers[i]]); return Object.fromEntries(entries); } const names = ['Mira', 'Royce', 'Kathie']; const numbers = ['3234958675', '9164059384', '4154958675'] const phoneBook = makePhoneBook(names, numbers); console.log(phoneBook);Solo por la nota, lodash si no te importa:
const names = ['Mira', 'Royce', 'Kathie']; const numbers = ['3234958675', '9164059384', '4154958675']; const phoneBook = _.zipObject(names, numbers); console.log(phoneBook); .as-console-wrapper { max-height: 100% !important; top: 0; } <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>Y, por supuesto, de una sola línea:
const names = ['Mira', 'Royce', 'Kathie']; const numbers = ['3234958675', '9164059384', '4154958675']; const phoneBook = names.reduce((acc, name, i) => (acc[name] = numbers[i], acc), {}); console.log(phoneBook); .as-console-wrapper { max-height: 100% !important; top: 0; }