Как я могу объединить эти функции - PullRequest
1 голос
/ 05 февраля 2020

Я изучаю JavaScript функций и написал три, которые в основном идентичны:

function filterAll() {
    location.hash = "/"
}

function filterCompleted() {
    location.hash = "/completed"
}

function filterActive() {
    location.hash = "/active"
}

Вместо того, чтобы иметь три функции, можно ли объединить их и вызвать параметры, которые Мне нужно в то время через одно имя функции? Вот как я вижу это в своей голове, но я не могу понять это:

function filters(all, completed, active) {
    all = location.hash = "/";
    completed = location.hash = "/completed";
    active = location.hash = "/active";
}

filters(all);

Ответы [ 6 ]

2 голосов
/ 05 февраля 2020

Используя литерал объекта в качестве простого поиска по карте, вы можете сделать это ->

const actions = {
  all: '/',
  completed: '/completed',
  active: '/active'
}

function filter(action) {
  location.hash = actions[action];
}

//use like
filter('all');
filter('completed');
filter('active');

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

function filter(action) {
  location.hash = action;
}

//use like
filter(actions.all);
filter(actions.completed);
filter(actions.active);

Вы можете использовать много констант, как упоминает @Rounin, но я не фанат создания дополнительных переменных, даже если они ограничены.

0 голосов
/ 05 февраля 2020

Сначала вам нужно будет определить эти переменные как константы, которые будут использоваться как параметры (действие).

Вы можете использовать этот код ниже

function filters ( action ) {
 return action==="all" ? location.hash = "/" : action==="completed" ? location.hash = "/completed": action==="active" ? location.hash = "/active" : "No Match Found";
}

Для проверки функции я привел простой пример:

let tod = "all"; 
let com = "completed"; 
let act = "active";

// Здесь вы увидите всю информацию, которую вы нужно. Вы можете запустить его в своем браузере.

[filters(tod),filters(com),filters(act)].forEach;
0 голосов
/ 05 февраля 2020

Похоже, это то, что вы ищете.

function filters(filterType) {
    if (filterType == 'all') location.hash = "/";
    if (filterType == 'completed') location.hash = "/completed";
    if (filterType == 'active') location.hash = "/active";
}

Хотя я бы не рекомендовал использовать такие функции, как это, вы бы использовали эту функцию:

filters('all'); // Set all filters
filters('completed'); // Set completed filters
filters('active'); // Set active filters
0 голосов
/ 05 февраля 2020

Три функции, представленные ниже, можно объединить в одну функцию, которая принимает один параметр.

Шаг первый

Сначала настройте три const переменные:

const all = '/';
const completed = '/completed';
const active = '/active';

Шаг второй

Далее объявите свою функцию:

function myFilter(filterType) {

  location.hash = filterType;
}

Шаг третий

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

  • myFilter(all);
  • myFilter(completed);
  • myFilter(active);
0 голосов
/ 05 февраля 2020

Вы можете попробовать это:

function filters(val) {
    switch (val) {
      case 'all':
       location.hash = "/";
       break;
      case 'completed ':
        location.hash = "/completed";
        break;
      case 'active':
       location.hash = "/active";
       break;
      default:
        break;
    }
    }
0 голосов
/ 05 февраля 2020

Я не уверен, что вы пытаетесь сделать, можете ли вы добавить некоторые заметки. Если это передать три переменные, то ваш последний пример кода в порядке. Если его передать одной переменной, имеющей три точки данных, затем использовать объект.

var filters = {all:"/", completed: "/completed", active: "active"};

, затем вы можете получить значения с помощью (например) alert(filters.all);

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