Top.Mail.Ru
Ответы

Что делает эта команда в консоли?

document.cookie
.split("; ")
.map(el => el.split("="))
.filter(el => el[0].includes("mp"))
.map(u => JSON.parse(decodeURIComponent(u[1])).tokenData)
.map(d => d.userHash + ";" + d.token)[0]

По дате
По рейтингу
Аватар пользователя
Ученик

Эта команда в консоли работает с cookies, которые хранятся в браузере. Сначала она получает все cookies и разбивает их на отдельные пары ключ-значение. Затем фильтрует только те cookies, ключи которых содержат "mp". После этого она декодирует значения этих cookies, парсит их как JSON и извлекает данные о пользователе, такие как `userHash` и `token`. В конце команда формирует строку из этих данных и возвращает только первую найденную строку. Если таких cookies нет, то результат будет пустым.

Аватар пользователя
Мудрец

нейросеть все верно понимает, благодаря тому что это каскад очень простых команд, благодаря тому что все линейно и примитивно по своему назначению

Аватар пользователя
Гений
  1. Разбиваем строку, содержащую куки, на массив отдельных кук; разделитель "; ".

  2. Каждую куку разбиваем на имя куки и значение куки; разделитель "=".

  3. Оставляем только куки, в имени которых есть "mp".

  4. Декодируем значение кук как JSON-строки и из получившихся объектов берём значения поля "tokenData".

  5. Из объектов, взятых из "tokenData" берём поля "userHash" и "token" и склеиваем их в одну строку, разделяя символом ";".

  6. Из получившегося в результате массива строк берём элемент с индексом 0.


Другими словами, берём первую куку, в имени которой есть "mp", преобразуем значение этой куки (строка в формате JSON) в объект JavaScript (назовём его obj) и формируем строку:

1
 obj.tokenData.userHash + ";" + obj.tokenData.token 


P.S. Решение, мягко говоря, неоптимальное, зато полностью в функциональном стиле.

Аватар пользователя
Мудрец

это каскадный ("пайп") вызов методов на языке JavaScript
document.cookie

1
 берет основной ствол XML-контента из интернет-страницы (document tree) и обращается к ветке "куки" 


.split("; ")

1
 использует точку с запятой как разделитель между нодами 


.map(el => el.split("="))

12
 выполняет картирующую функцию над каждым элементом, возвращая массив
каждый элемент дробится с использованием символа "равно" как разделителя 


.filter(el => el[0].includes("mp"))

12
 вызывает другую картирующую функцию, на этот раз фильтр
возвращаются только элементы, нулевой член которых содержит буквенную последовательность "mp" 


.map(u => JSON.parse(decodeURIComponent(u[1])).tokenData)

1
 над результатом предыдущей функции, поэлементно, член с названием "tokenData" переводится из формата URI в текстовый вид, а он форматируется в валидный JSON-блок 


.map(d => d.userHash + ";" + d.token)[0]

12
 над результатом предыдущей функции производятся следующие действия
берется поле с названием "userHash" из JSON-блока, соединяются с точкой с запятой, а потом - с полем "token" 


Видео по теме