Словарь с именованными параметрами функции

function getElementByXpath(path, search_scope = document) {
  console.log(arguments)
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

Как мне получить словарь из аргументов функции с их значениями в таком виде?

{
  path: '//span',
  search_scope: document
}

Переменная arguments выдает только значения параметров без их имен.


Ответы (1 шт):

Автор решения: yar85

В случае функции из юзеркода, можно получить ее строковое представление - а значит, и имена параметров:

function getElementByXpath(path, search_scope = document) {
  const argsMap = mapArguments(getElementByXpath, arguments);
  console.log(argsMap);
  // return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

function mapArguments(func, args) {
  const paramsStr = (func.toString().match(/^[^(]+\(([^)]+)/) ?? [0, ''])[1];
  return paramsStr.split(',').reduce((rslt, name, idx) => {
    rslt[name.replace(/=.*$/, '').trim()] = args[idx];
    return rslt;
  }, {});
}

getElementByXpath('//span', document);

Вывод в консоль объекта document не очень показателен, увы :)

→ Ссылка