Un approccio, che evita l'iterazione su un array, sarebbe:
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
Procedura dettagliata
La suddivisione di una stringa per token produrrà una matrice con una stringa (stesso valore), nel caso in cui il token non esista in una stringa o una matrice con due stringhe, nel caso in cui il token venga trovato in una stringa.
Il primo elemento (a sinistra) è la stringa di ciò che era prima del token, e il secondo (a destra) è la stringa di ciò che era dopo il token.
(NOTA: nel caso in cui la stringa inizi con un token, il primo elemento è una stringa vuota)
Considerando che i cookie sono memorizzati come segue:
"{name}={value}; {name}={value}; ..."
per recuperare un valore specifico del cookie, dobbiamo solo ottenere una stringa che sia dopo "; {name} =" e prima del prossimo ";". Prima di eseguire qualsiasi elaborazione, anteponiamo la stringa di cookie con ";", in modo che ogni nome di cookie, incluso il primo, sia racchiuso tra ";" e "=":
"; {name}={value}; {name}={value}; ..."
Ora, possiamo prima dividere per "; {name} =", e se il token viene trovato in una stringa di cookie (ovvero abbiamo due elementi), finiremo con il secondo elemento che è una stringa che inizia con il nostro valore di cookie. Quindi lo estraiamo da un array (cioè pop) e ripetiamo lo stesso processo, ma ora con ";" come token, ma questa volta estraendo la stringa sinistra (ovvero shift) per ottenere il valore del token effettivo.