type Link = { link: string isPlaceholder: boolean name?: string } const links: Link[] = [ { link: 'https://facebook.com/', name: 'facebook', isPlaceholder: true }, { link: 'https://linkedin.com/', name: 'linkedin', isPlaceholder: true }, { link: 'https://vk.com/', name: 'vk', isPlaceholder: true }, { link: 'https://instagram.com/', name: 'instagram', isPlaceholder: true }, { link: 'https://t.me/', name: 'telegram', isPlaceholder: true } ] const checkLink = (link: string, keyword: string): boolean => link.includes(keyword) export const profileSocialLinks = (socialLinks: string[]): Link[] => { const processedLinks: Link[] = [] let unmatchedLinks: string[] = [...socialLinks] links.forEach((linkObj) => { let linkMatched = false socialLinks.forEach((serverLink) => { if (checkLink(serverLink, new URL(linkObj.link).hostname.replace('www.', ''))) { processedLinks.push({ ...linkObj, link: serverLink, isPlaceholder: false }) linkMatched = true unmatchedLinks = unmatchedLinks.filter((unmatchedLink) => unmatchedLink !== serverLink) } }) if (!linkMatched) { processedLinks.push({ ...linkObj, isPlaceholder: true }) } }) unmatchedLinks.forEach((unmatchedLink) => { processedLinks.push({ link: unmatchedLink, isPlaceholder: false }) }) return processedLinks.sort((a, b) => { if (a.isPlaceholder && !b.isPlaceholder) { return 1 } else if (!a.isPlaceholder && b.isPlaceholder) { return -1 } else { return 0 } }) }