Сделать значения внутри массива javascript условными

Как сделать именованные значения массива условными?

Здесь, в приведенном ниже коде, у меня есть массив params, к которому я добавляю еще один именованный параметр в условиях if. В условии if, которое говорит INSERT, я хочу иметь поля userId и displayName, а в условии, которое говорит REMOVE, мне нужно только поле userId.

Весь смысл в том, чтобы код выглядел чище, не повторяя один и тот же код дважды, а размещая его в одном месте и делая displayName условным в зависимости от того, является ли оно условием INSERT или REMOVE. В моем фактическом коде гораздо больше условий, и он выглядит очень длинным, повторяя его в каждом из этих условий if.

 var params = {
        secretArn: 'secretArn',
        resourceArn: 'resourceArn',
        database: 'db',
    };

if (record.eventName == 'INSERT') {
        params.parameters = [{
                  name: "userId",
                        value: {
                            "stringValue": userId
                        }
                    },
                    {
                        name: "displayName",
                        value: {
                            "stringValue": displayName
                        }
                    },
                ];

       }
if (record.eventName == 'REMOVE') {
        params.parameters = [{
                  name: "userId",
                        value: {
                            "stringValue": userId
                        }
                    },
                    {
                        name: "displayName",
                        value: {
                            "stringValue": displayName
                        }
                    },
                ];

       }

Честно говоря, я изо всех сил пытаюсь следовать вашему вопросу, но, исходя из моих догадок, почему бы вам не вызвать функцию для вставки и удаления. Что-то вроде -> if (record.eventName == 'INSERT') {callInsertFunction()} if (record.eventName == 'REMOVE') {callRemoveFunction()}. Внутри каждой функции вы можете работать с параметрами по своему усмотрению.

RodP 18.03.2022 23:58

Конечно, я могу это сделать, но я не это имел в виду. Даже если это функция, я должен сделать поле displayName массива параметров условным. Это то, чего я пытаюсь достичь.

Sumchans 19.03.2022 00:01

Извините, до сих пор не следил. Условно как? Я вижу только одну определенную переменную, которая называется displayName.

RodP 19.03.2022 00:04

Массив параметров имеет идентификатор пользователя и отображаемое имя. Я хочу сделать значение displayName условным для некоторых условий if.

Sumchans 19.03.2022 00:06

У вас уже есть условия if INSERT и if REMOVE as if. Вы говорите, что у вас есть другие условия if? Как будут определяться разные значения для displayName?

RodP 19.03.2022 00:09

Да, у меня есть другие условия if, и не всем условиям if требуется значение displayName.

Sumchans 19.03.2022 00:11

Давайте продолжить обсуждение в чате.

RodP 19.03.2022 00:14

Извините, я начал чат, но понял, что мне нужно уйти сейчас. Придется делать через некоторое время.

Sumchans 19.03.2022 00:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После размышлений о Q кажется, что основным решением должна быть реализация шаблона динамической диспетчеризации (могу ошибиться в названии шаблона). Вот пример решения:

const getUserId = () => Math.ceil(Math.random() * 100);

const getDisplayName = () => {
  const names = ['Sebastian', 'Farrell', 'Artur', 'Geghard', 'Matevos'];
  return names[Math.floor(Math.random() * names.length)];
};

const makeParametr = (name, stringValue) => () => ({
    name,
    value: { stringValue },
});

const dispatcher = {
  INSERT: [
    { func: makeParametr, args: [() => 'userId', getUserId] },
    { func: makeParametr, args: [() => 'displayName', getDisplayName] },
  ],
  REMOVE: [
    { func: makeParametr, args: [() => 'userId', getUserId] },
  ],
};

const getParameters = (eventName) => {
  if (!dispatcher[eventName]) throw new Error(`No such event: ${eventName}`);

  return dispatcher[eventName].map(({ func, args }) => {
    const currentArgs = args.map((arg) => arg());

    return func(...currentArgs)();
  }) 
};

console.info(getParameters('INSERT'));
console.info(getParameters('REMOVE'));
console.info(getParameters('OTHER_EVENT'));
.as-console-wrapper{min-height: 100%!important; top: 0}

Спасибо Александр. Я должен изучить это подробно. Похоже, это то, как я должен пойти переписать.

Sumchans 21.03.2022 02:18

Другие вопросы по теме