code: function overrideTags (parent, child, telegraf) {
    const childCopy = {};
    const toAppend = [];
    formatTags(child, telegraf).forEach(tag => {
      const idx = typeof tag === 'string' ? tag.indexOf(':') : -1;
      if (idx < 1) { // Not found or first character
        toAppend.push(tag);
      } else {
        childCopy[tag.substring(0, idx)] = tag.substring(idx + 1);
      }
    });
    const result = parent.map(tag => {
      const idx = typeof tag === 'string' ? tag.indexOf(':') : -1;
      if (idx < 1) { // Not found or first character
        return tag;
      }
      const key = tag.substring(0, idx);
      if (childCopy.hasOwnProperty(key)) {
        const value = childCopy[key];
        delete childCopy[key];
        return `${key}:${value}`;
      }
      return tag;
    });
    Object.keys(childCopy).forEach(key => {
      result.push(`${key}:${childCopy[key]}`);
    });
    return result.concat(toAppend);
  }
docs: Overrides tags in parent with tags from child with the same name (case sensitive) and return the result as new
  array. parent and child are not mutated.