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];
}
}
How can I get my for loop to iterate through both arrays simultaneously and return names as a key and numbers as the values?
You mostly have the right idea.
Two suggestions:
numbers.length or names.length as the number of iterationsA working example would look something like this:
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);
More concisely, zip the arrays together, then pass that to 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);
Just for the note, lodash if you don't mind:
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>
And, of course, one-liner:
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; }