Tengo el siguiente código que funciona como se esperaba. ¿Hay alguna forma en que pueda reducir la cantidad de líneas o la funcionalidad para que pueda ser más modular?
Las preocupaciones son que estoy llamando al evento de seguimiento de exponena dos veces. Me preguntaba si hay alguna manera de que pueda construirlo una vez y pasarle parámetros en función de la condición if else. Estoy aprendiendo javascript, así que busco alguna optimización de código.
window.onload = function () { var categorycollection = JSON.parse(document.querySelector('.pipa').getAttribute('data-globaltargeting')); var isprofessional = (categorycollection['Type'] == 'PatientPlusArticle') ? 'Yes' : 'No'; if (categorycollection['Type'] == 'PatientPlusArticle' || categorycollection['Type'] == 'MedicineLeaflet' || categorycollection['Type'] == 'PatientInformationLeaflet') { exponea.track('page_visit', { "referrer": document.referrer, "path": window.location.pathname, "category name": document.querySelectorAll('.breadcrumb-item')[1].querySelector('span').innerText, "Isprofessional": isprofessional }); } else { exponea.track('page_visit', { "referrer": document.referrer , "path": window.location.pathname }); } }El operador condicional puede asignar las propiedades adicionales cuando sea necesario; de lo contrario, use el objeto vacío. Combinar el resultado en la llamada a .track . También puede usar .includes en lugar de extraer el Tipo tantas veces.
const { Type } = JSON.parse(document.querySelector('.pipa').getAttribute('data-globaltargeting')); const additionalObj = ['PatientPlusArticle', 'MedicineLeaflet', 'PatientInformationLeaflet'].includes(Type) ? { "category name": document.querySelectorAll('.breadcrumb-item')[1].querySelector('span').innerText, Isprofessional: Type == 'PatientPlusArticle' ? 'Yes' : 'No' } : {}; exponea.track('page_visit', { referrer: document.referrer, path: window.location.pathname, ...additionalObj });Sin embargo, los selectores y los índices secundarios tienen un poco de olor a código: no conozco el contexto más amplio, pero esa parte probablemente también merezca una refactorización. De lo contrario, sería muy fácil que un simple cambio en el HTML rompiera todo.