#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. просто ошибка копирования и вставки, забыл добавить переменную