Конвертировать объект в параметры для функции - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть AJAX с php, который выводит различные функции для запуска на стороне jquery.

$.each(data['function'],function(key,value){
  window[key](value)
}

data['function'] содержит данные функции для запуска.

Например:

{"append":{"message":"hello","url":"link.com"}}

Активирует функцию

function append(message,url){...}

Проблемаявляется то, что {"message":"hello","url":"link.com"} все содержится в message.Как я могу перевести или преобразовать {"message":"hello","url":"link.com"} в качестве параметров для функции?

сейчас она работает так:

append({"message":"hello","url":"link.com"},undefined)

Каково решение, позволяющее ей работать так:

append("hello","link.com")

Я хочу сохранить параметры без изменений append(message,url) и не прибегать к методу с одним параметром.Я не могу найти хорошее решение.

Отредактировано (упрощено)

Как изменить объект Params:

var Params={"message":"hello","url":"link.com"}
window['append'](Params);

Для запуска так же, как:

window['append']("hello","link.com")

1 Ответ

0 голосов
/ 17 декабря 2018

Распространение значений объекта data['function'] в список параметров функции, которую вы хотите вызвать:

append(...Object.values(data.function.message));

Старый способ сделать это - использовать .apply вместо:

append.apply(undefined, Object.values(data.function.message));

Обратите внимание, что довольно сложно ввести объект в ключ с именем function - вероятно, можно ожидать, что вместо него будет функция.Вы могли бы рассмотреть другое имя свойства, такое как parametersObj или что-то в этом роде.

Если имя функции также динамическое (что является запахом кода), тогда используйте Object.entries, чтобы получить обаключ (имя функции) и значение (объект) одновременно:

const [fnName, obj] = Object.entries(data.function);
window[fnName](...Object.values(obj));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...