Одним із підходів, який дозволяє уникнути повторення масиву, буде:
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
Покрокова інструкція
Розбиття рядка за токеном буде створювати або масив з однією рядком (однакове значення), якщо маркер не існує в рядку, або масив з двома рядками, якщо маркер знайдеться в рядку.
Перший (лівий) елемент - це рядок того, що було до маркера, а другий (праворуч) - це рядок того, що було після маркера.
(ПРИМІТКА: у випадку, якщо рядок починається з маркера, перший елемент є порожнім рядком)
Враховуючи, що файли cookie зберігаються наступним чином:
"{name}={value}; {name}={value}; ..."
щоб отримати певне значення файлу cookie, нам просто потрібно отримати рядок, який знаходиться після "; {name} =" і перед наступним ";". Перш ніж проводити будь-яку обробку, ми додаємо рядок cookie з ";", щоб кожне ім'я файлу cookie, включаючи перше, було додане до ";" та "=":
"; {name}={value}; {name}={value}; ..."
Тепер ми можемо спочатку розділити на "; {name} =", і якщо маркер знайдений у рядку файлів cookie (тобто у нас є два елементи), ми закінчимо, що другим елементом буде рядок, що починається з нашого значення cookie. Потім ми витягуємо це з масиву (тобто pop) і повторюємо той самий процес, але тепер із ";" як маркер, але цього разу витягуючи ліву рядок (тобто зсув), щоб отримати фактичне значення лексеми.