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',...