Un enfoque, que evita iterar sobre una matriz, sería:
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
Tutorial
Dividir una cadena por un token producirá una matriz con una cadena (mismo valor), en caso de que el token no exista en una cadena, o una matriz con dos cadenas, en caso de que el token se encuentre en una cadena.
El primer elemento (izquierda) es la cadena de lo que estaba antes del token, y el segundo (derecha) es la cadena de lo que estaba después del token.
(NOTA: en caso de que la cadena comience con un token, el primer elemento es una cadena vacía)
Teniendo en cuenta que las cookies se almacenan de la siguiente manera:
"{name}={value}; {name}={value}; ..."
para recuperar un valor de cookie específico, solo necesitamos obtener una cadena que esté después de "; {name} =" y antes del siguiente ";". Antes de realizar cualquier procesamiento, anteponemos la cadena de cookies con ";", de modo que cada nombre de cookie, incluido el primero, esté encerrado con ";" y "=":
"; {name}={value}; {name}={value}; ..."
Ahora, primero podemos dividir por "; {name} =", y si el token se encuentra en una cadena de cookies (es decir, tenemos dos elementos), terminaremos con el segundo elemento como una cadena que comienza con nuestro valor de cookie. Luego sacamos eso de una matriz (es decir, pop) y repetimos el mismo proceso, pero ahora con ";" como un token, pero esta vez tirando de la cadena izquierda (es decir, shift) para obtener el valor real del token.