Một cách tiếp cận, tránh lặp lại trên một mảng, sẽ là:
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
Hướng dẫn
Việc tách một chuỗi bằng mã thông báo sẽ tạo ra một mảng, với một chuỗi (cùng giá trị), trong trường hợp mã thông báo không tồn tại trong một chuỗi hoặc một mảng có hai chuỗi, trong trường hợp mã thông báo được tìm thấy trong một chuỗi.
Phần tử đầu tiên (bên trái) là chuỗi của phần trước mã thông báo và phần thứ hai (bên phải) là phần của phần trước phần sau của mã thông báo.
(LƯU Ý: trong trường hợp chuỗi bắt đầu bằng mã thông báo, phần tử đầu tiên là chuỗi trống)
Xem xét rằng cookie được lưu trữ như sau:
"{name}={value}; {name}={value}; ..."
để truy xuất giá trị cookie cụ thể, chúng ta chỉ cần lấy chuỗi nằm sau "; {name} =" và trước tiếp theo ";". Trước khi thực hiện bất kỳ quá trình xử lý nào, chúng tôi thêm vào chuỗi cookie bằng ";", sao cho mọi tên cookie, kể cả tên đầu tiên, được đính kèm với ";" và "=":
"; {name}={value}; {name}={value}; ..."
Bây giờ, trước tiên chúng ta có thể phân tách bằng "; {name} =" và nếu mã thông báo được tìm thấy trong chuỗi cookie (nghĩa là chúng ta có hai phần tử), chúng ta sẽ kết thúc với phần tử thứ hai là một chuỗi bắt đầu bằng giá trị cookie của chúng ta. Sau đó, chúng tôi lấy nó ra từ một mảng (tức là pop) và lặp lại quá trình tương tự, nhưng bây giờ với ";" dưới dạng mã thông báo, nhưng lần này kéo ra chuỗi bên trái (tức là dịch chuyển) để lấy giá trị mã thông báo thực tế.