Простая установка ретривера от печенья


У меня есть печенье на моем сайте со следующим значением:

eyJGIjp0cnVlLCJBIjp0cnVlLCJUIjpmywxzzswiuyi6zmfsc2usikciomzhbhnllcjyijpmywxzzx0%3Д

Я использую эту функцию, чтобы получить значение с сайта, поэтому я могу использовать его в приложениях мой сайт использует в Greenlight или иных элементов или их блокировать.

function getCookieLawSettings() {
    return document.cookie.split(';')
            .map(c => c.trim().split('='))
            .filter(c => c.shift() == 'cookie_law')
            .map(c => JSON.parse(atob(decodeURIComponent(c.pop())))).pop()
}

Какие улучшения я могу сделать этот код? Стилистические и функциональные.
Есть вещи, которые я пропустил или понял, я должен учитывать?

образец с фиктивными данными:

document.not_cookie = "_ga=GA1.2.431922604.1523436815; _gid=GA1.2.1579280874.1523436815; cookie_law=eyJGIjp0cnVlLCJBIjp0cnVlLCJUIjpmYWxzZSwiUyI6ZmFsc2UsIkciOmZhbHNlLCJYIjpmYWxzZX0%3D";
function getCookieLawSettings() {
    return document.not_cookie.split(';')
            .map(c => c.trim().split('='))
            .filter(c => c.shift() == 'cookie_law')
            .map(c => JSON.parse(atob(decodeURIComponent(c.pop())))).pop()
}
console.log(getCookieLawSettings());



98
1
задан 13 апреля 2018 в 03:04 Источник Поделиться
Комментарии
1 ответ

Так как (я предполагаю) должен быть только один файл cookie фрагмент называется cookie_law вы должны использовать find вместо filter. filter будет пройти через весь массив, даже если в результате первого элемента.

Как она стоит, я думаю, что это плохо для filter метод для изменения базовых данных.

Также количество скобок в строке

.map(c => JSON.parse(atob(decodeURIComponent(c.pop())))).pop()

это довольно страшно. Я бы тянуть хоть немного в другой способ.

обновление

В моем коде я обычно разделить мою логику в метод, чтобы сделать любое печенье, таким образом, я могу использовать его для других печенье. Логика тоже оказывается проще.

function getCookieLawSettings() {
return decodeCookie(getCookie('cookie_law'));
}

function getCookie(na,e) {
var cookie = document.cookie.split(';')
.map(c => c.trim().split('='))
.filter(c => c[0] === name);
return cookie ? cookie[1] : undefined;
}

function decodeCookie(data) {
return JSON.parse(atob(decodeURIComponent(data)));
}

function encodeCookie(data) {
return btoa(encodeURIComponent(JSON.stringify)));
}

3
ответ дан 13 апреля 2018 в 07:04 Источник Поделиться