FormatAddress - JSFiddle - JSFiddle
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
JavaScript
function formatAddress(poi) {
let address = poi.address;
let customTitle = poi.customTitle;
const RULES = [{
requiredKeys: ['customTitle', 'street', 'houseNumber', 'city'],
rules: `Rule 1: ${customTitle}
${address.street} ${address.houseNumber}, ${getPostalCodeWithDash(address.postalCode)} ${address.city} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['customTitle', 'city'],
rules: `Rule 2: ${customTitle}
${address.street || ''} ${getStreetIntersection(address.streetIntersection)}${address.street || address.streetIntersection ? ', ' : ''}${getPostalCodeWithDash(address.postalCode)} ${address.city} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['customTitle'],
rules: `Rule 3: ${customTitle}
${address.street || ''} ${getStreetIntersection(address.streetIntersection)} ${address.houseNumber || ''} ${getPostalCodeWithDash(address.postalCode, true)} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['street', 'houseNumber', 'district', 'countryCode'],
rules: `Rule 4: ${address.street} ${address.houseNumber}
${address.district} ${getCityWithPrecedingComa(address.city)} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['street', 'houseNumber', 'city', 'countryCode'],
rules: `Rule 5: ${address.street} ${address.houseNumber}
${getPostalCodeWithDash(address.postalCode)} ${address.city || ''} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['street', 'houseNumber'],
rules: `Rule 6: ${address.street} ${address.houseNumber}
${address.postalCode || ''} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['street', 'district', 'countryCode'],
rules: `Rule 7: ${address.street} ${getStreetIntersection(address.streetIntersection)}
${address.district} ${getCityWithPrecedingComa(address.city)} ${getCountryCode(address.countryCode)}`
}, {
requiredKeys: ['street', 'city',...