@Vadim1899

Является ли такой код плохим?

привет!
имеется такой код:
const SECTIONS = [
    'top',
    'bottom',
    'head',
    'shoes',
    'bag',
    'accs',
];

const prepareShareItems = () => {
    const person = store.getState().globals.person; // объект { top: { slide: 0, list: [...] }, bottom: { slide: 0, list: [...] }, head: { slide: 0, list: [...] } etc}
    const items = store.getState().globals.items; // массив объектов

    let result;
    for (let i = 0; i < SECTIONS.length; i++) {
        const _section = SECTIONS[i];
        const _itemIndex = person[_section].slide;
        const _itemId = person[_section].list[_itemIndex];

        const _item = items.find((item) => item.id === _itemId);
        result = {
            ...result,
            [_section]: _item.image,
        };
    }

    return result;
};


в двух словах про алгоритм: получаем массив секций (SECTIONS), далее каждый элемент массива используем в качестве ключа person; получаем slide каждой секции в person; item id у которого индекс _itemIndex; ищем в items объект с ид _itemIndex и забируем у него image и закидываем в result.

Вопрос следующий: является ли это плохим кодом? Да, многие вещи можно сократить, но так уж с университета повелось, что каждый шаг алгоритма мне для понимания удобнее писать отдельно. Просто часто вижу что подобные алгоритмы пишут чуть ли не в одну длинную строку, где ничего не понятно и не структурировано
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
WblCHA
@WblCHA
Современное оформление:
const SECTIONS = [
    'top',
    'bottom',
    'head',
    'shoes',
    'bag',
    'accs',
  ];

  const prepareShareItems = () => {
    const { person, items } = store.getState().globals;
    
    const result = SECTIONS.reduce((acc, section) => {
      const personSection = person[section];
      const { slide } = personSection;
      const itemId = personSection.list[slide];
      
      const item = items.find((item) => item.id === itemId);
      acc[section] = item?.image;
      
      return acc;
    }, {});
    
    return result;
  }
Ответ написан
@TheOnlyFastCoder2
Вроде по максимуму сократил и улучшил.
Если вы как-нибудь исправите(улучшите) названия своих ключей , код будет еще лучше смотреться
const SECTIONS = ['top','bottom','head','shoes','bag','accs',];

const prepareShareItems = ({person,items}) => {    
    for (var  i = 0 , res = {} ; i < SECTIONS.length; i++) {
      	const {slide,list}  = person[SECTIONS[i]];
      	Object.assign(res,{[SECTIONS[i]]: items.find((item) => item.id === list[slide]).image})
    }
    return res;
};

prepareShareItems(store.getState().globals)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы