Как вызвать функцию из массива javascript по нажатию кнопки - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в JavaScript и столкнулся с проблемой. У меня есть массив с функциями:

allFunctions = () => [
  function1(),
  function2(),
  function3(),
  function4(),
  function5(),
  function6(),
  function7(),
  function8(),
  function9()
]

Теперь я хочу запустить эту функцию и посмотреть, какая функция приводит к «истинному» значению. И если это так, я хочу повторно использовать только эту функцию при нажатии кнопки.

Так что, если я вызову allFunctions (), мой вывод будет:

[false, false, false, true, false, false, false, false, false]

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

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Простая реализация, если я вас правильно понял. Учитывая две кнопки.

<button type="button" id="find">Find</button>
<button type="button" id="search">Search</button>

и JS

var functions = {
    find: function() { alert("finding..."); },
    search: function() { console.log("searching..."); }
};
document.getElementById ("find")
    .addEventListener ("click", handleClick);
document.getElementById ("search")
    .addEventListener ("click", handleClick);

function handleClick(event) {
    functions[event.target.id]();
}

Вы можете добавить больше логики.

пример jsfiddle

0 голосов
/ 03 ноября 2019

Вы должны создать массив функций, не вызывая их (вызов их создаст массив результатов). Теперь вы можете использовать массив с Array.find() (чтобы получить 1-ю функцию, которая возвращает true) или Array.find() (чтобы получить все функции, которые возвращают true):

const fnFalse = () => false
const fnTrue = () => true

const allFunctions = [fnFalse, fnFalse, fnFalse, fnFalse, fnFalse, fnTrue, fnFalse, fnFalse, fnFalse]

const trueFn = allFunctions.find(fn => fn())

console.log(trueFn.name, trueFn())

Вы можете сделать то же самое с массивом, который вы создали с помощью allFunctions, используя Array.indexOf:

const fnFalse = () => false
const fnTrue = () => true

const fns = [fnFalse, fnFalse, fnFalse, fnFalse, fnFalse, fnTrue, fnFalse, fnFalse, fnFalse]

const allFunctions = () => [fnFalse(), fnFalse(), fnFalse(), fnFalse(), fnFalse(),  fnTrue(), fnFalse(), fnFalse(), fnFalse()]

const trueFn = fns[allFunctions().indexOf(true)]

console.log(trueFn.name, trueFn())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...