Дублировать код Javascript. как его модулировать

#javascript #arrays #json #reactjs #object

#javascript #массивы #json #reactjs #объект

Вопрос:

Я сталкиваюсь с повторяющейся проблемой в Sonar, и я не могу понять, как ее исправить. Вот пример кода. Пожалуйста, не переданные поля формы являются неизменяемым состоянием, поддерживаемым в моем проекте. Поэтому, если я это сделаю formFields.getIn(['home', 'value']) , я пытаюсь получить значение определенного поля home в этом случае. и я сравниваю все значения с. 'true' и как только я сравниваю, я вставляю соответствующую строку lifeEvents . Эти строки (3,4 и 5,6) показывают, что я дублирую сравнение и отправку данных в массив.

 1. export const getLifeEvents = formFields => {
2.  const lifeEvents = [];
3.    if(formFields.getIn(['home', 'value']) === 'true')
4.      lifeEvents.push("Buy home");
5.    if(formFields.getIn(['married', 'value']) === 'true')
6.      lifeEvents.push("Getting married");
7.  return lifeEvents;
8. }
  

Чтобы избежать этого дублирования, я попробовал следующее

 export const getLifeEvents = formFields => {
  const lifeEvents = [];
  const Info = {
    title: ['home', 'married'],
    text: ['Buy home', 'Getting married']
  }

  const data = Info.title.map((e, i) => {
    return { title: e, text: Info.text[i]
  }

  const result = data amp;amp; data.map(item => {
    if(formFields.getIn([item.title, 'value']) === 'true')
      lifeEvents.push(item.text);
    return lifeEvents;
  });
}

  

Когда я это делаю, я всегда получаю undefined . может кто-нибудь предложить, пожалуйста

Ответ №1:

Создайте объект с ключами и текстом. Перебирайте его с помощью reduce

 const myEvents = {
  home: 'Buy home',
  married: 'Getting married'
};


export const getLifeEvents = formFields => {
  return Object.entries(myEvents).reduce((lifeEvents, [key, text]) => {
    if (formFields.getIn([key, 'value']) === 'true') {
      lifeEvents.push(text);
    }
    return lifeEvents;
  }, []);
}
  

Комментарии:

1. @epascarello- lifeEvents.push(«Купить дом»);. Это не всегда одно и то же. Даже строки, которые я добавляю в массив, различны для каждого поля

2. просто ошибка копирования и вставки, забыл добавить переменную