Оптимизируйте эти 4 метода в 1 методе

#javascript #reactjs #typescript #optimization #methods

#javascript #reactjs #typescript #оптимизация #методы

Вопрос:

 const getDate = (id) =>{
  const userId =  info.find(user => user.id === id)
  return userId.date;
 }

 const getValueAtOne = (id) => {
   const userId =  info.find(user => user.id === id)
   if(userId?.value[0]){
   return userId?.value[0]
   }
  
 }
 const getValueAtTwo = (id) => {
  const userId =  info.find(user => user.id === id)
   if(userId?.value[1]){ 
   return userId?.value[1]
   }
 
 }
 const getAllValues = (id) => {
  const userId =  info.find(user => user.id === id)
   if(userId?.value) {
   const arrValue = userId?.roles.map((validData) => {
     return { value: validData, label:validData };
   });
   return arrValue;
 }
 }
  

У меня есть эти 4 метода, которые я вызываю из разных мест в моем коде.Но я хочу оптимизировать свой код и хочу, чтобы все эти методы были объединены в один метод, но я не могу придумать наилучший способ сделать это. первый метод возвращает мне дату, второй возвращает значение массива в позиции 1, третий метод возвращает значение массива в позиции 2, а четвертый метод возвращает все значение и преобразует его в объект.

Ответ №1:

Вы можете вернуть один объект следующим образом:

 const getAll = (id) => {
  const userId = info.find((user) => user.id === id);

  const [valueAtOne, valueAtTwo] = userId?.value ?? [];

  const allValues =
    userId?.value.roles.map((validData) => ({
      value: validData,
      label: validData,
    })) ?? [];

  return {
    allValues,
    valueAtOne,
    valueAtTwo,
  };
};
  

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

1. это выдает следующую ошибку: объекты недопустимы как дочерние элементы React (найдено: объект с ключами {valueAtOne, valueAtTwo}). Если вы хотели отобразить коллекцию дочерних элементов, используйте вместо этого массив.

2. Могу ли я использовать switch case или что-то еще для извлечения значений на основе условий. Я не хочу, чтобы все значения возвращались одновременно.

3. Эта ошибка связана с тем, как вы отображаете значение, а не с ответом. Также, пожалуйста, просто задайте другой вопрос и сосредоточьтесь на том, что вы спросили.

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

5. Вам не обязательно использовать все значения вместе … getAll(id).valueAtOne