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

Итак, у меня есть следующий метод, который возвращает мне кучу имен классов:

function class_names() {
    return [
        'optanon-category-C0001',
        'optanon-category-C0002',
        'optanon-category-C0003',
        'optanon-category-C0004',
        'optanon-category-C0005'
    ];
}

Теперь у меня есть другой метод, который в основном выводит мне строку на основе имени класса, переданного внутри параметра:

function classname_output(class_name) {
    let output = '';
    switch (class_name) {
        case 'optanon-category-C0001':
            output = 'Strictly Necessary Cookies';
            break;
        case 'optanon-category-C0002':
            output = 'Performance Cookies';
            break;
        case 'optanon-category-C0003':
            output = 'Functional Cookies';
            break;
        case 'optanon-category-C0004':
            output = 'Targeting Cookies';
            break;
        case 'optanon-category-C0005':
            output = 'Social Media Cookies';
            break;
        default:
            output = 'No cookies match the specified class.';
            break;
    }

    return output;
}

Есть ли способ объединить два метода в один метод с возвратом объекта, а затем нацелить его на ключ объекта?

0
Glider 26 Ноя 2021 в 05:49
Что вы имеете в виду под «объединить два метода в один метод с возвращением объекта, а затем нацелить его на ключ объекта» .
 – 
Spectric
26 Ноя 2021 в 06:00
@Spectric, есть ли способ, которым я могу использовать метод с именем classname и иметь параметр, но затем получить доступ к ключу строки, например, classname ('optanon-category-C0001'). String, который поможет мне избавиться от оператор переключения.
 – 
Glider
26 Ноя 2021 в 06:05
По сути, сохраните все имена классов и их выходные данные в одном методе, а затем сделайте возврат объекта. Тогда я могу получить доступ к методу, например class_name('test').output или class_name('test').id.
 – 
Glider
26 Ноя 2021 в 06:06

1 ответ

Лучший ответ

У вас может быть объект (словарь), который сопоставляет имена классов (ключ) со строкой (значением), а затем иметь функцию для возврата значения, если ключ существует в словаре, или строку по умолчанию «Не существует», если это не так. т.

const dict = {
  'optanon-category-C0001': 'Strictly Necessary Cookies',
  'optanon-category-C0002': 'Performance Cookies',
  'optanon-category-C0003': 'Functional Cookies',
  'optanon-category-C0004': 'Targeting Cookies',
  'optanon-category-C0005': 'Social Media Cookies'
};

function check(dict, className) {
  return dict[className] ?? 'No cookies match the specified class.';
}

console.log(check(dict, 'optanon-category-C0003'));
console.log(check(dict, 'optanon-category-C0005'));
console.log(check(dict, 'optanon-category-C0000'));

Дополнительная документация

1
Andy 26 Ноя 2021 в 06:08
Спасибо @Andy, это именно то, на что я намекал, но я не был уверен, как правильно его выполнить, сейчас протестирую и последую за этим.
 – 
Glider
26 Ноя 2021 в 06:07
Привет, @Andy, у меня есть еще один метод, который зависит от метода class_names(), который в основном проходит через for (let i = 0; i < cookie_classes.length; i++) { и проверяет все имена классов, такие как if (target_node.hasClass(cookie_classes[i])) { - есть ли способ пройти через объект dict и повторно использовать только клавиши для другой функции?
 – 
Glider
26 Ноя 2021 в 06:20
Вы можете получить массив ключей с помощью Object.keys: const classNames = Object.keys(dict). Вы это имели в виду?
 – 
Andy
26 Ноя 2021 в 06:22
1
Это именно то, что мне было нужно, спасибо!
 – 
Glider
26 Ноя 2021 в 06:22