// Factory function for creating an Address object
function Address(city, zip) {
return { city, zip };
}
// Factory function for creating a Person object
function Person(name, age, address) {
return { name, age, address };
}
// Print each person in a formatted line
function printPersons(people) {
for (const p of people) {
console.log(
`${p.name} | age: ${p.age} | city: ${p.address.city} | zip: ${p.address.zip}`
);
}
}
// Sort persons by city, then zip, then age
function sortPersons(people) {
people.sort((a, b) => {
if (a.address.city !== b.address.city) {
return a.address.city.localeCompare(b.address.city);
}
if (a.address.zip !== b.address.zip) {
return a.address.zip - b.address.zip;
}
return a.age - b.age;
});
}
// Sample data
const people = [
Person("Alice", 30, Address("San Francisco", 42100)),
Person("Bob", 40, Address("Austin", 32000)),
Person("Carol", 35, Address("New York City", 42000)),
Person("Dave", 25, Address("Austin", 32000)),
Person("Eve", 28, Address("New York City", 61000)),
];
// Perform sorting
sortPersons(people);
// Display sorted results
printPersons(people);
/*
run:
Dave | age: 25 | city: Austin | zip: 32000
Bob | age: 40 | city: Austin | zip: 32000
Carol | age: 35 | city: New York City | zip: 42000
Eve | age: 28 | city: New York City | zip: 61000
Alice | age: 30 | city: San Francisco | zip: 42100
*/