...

Метод groupBy

Тема в разделе "Скрипты и разработка", создана пользователем kirillovykh, 28 май 2024.

  1. kirillovykh

    kirillovykh Участник

    При разработке решений может возникнуть необходимость группировки массива элементов по ключу/ключам.

    В данном случае рассматривается типизированный метод groupBy под тип элемента приложения.
    Тип OmitAny используется для исключения any из системного типа ItemData, чтобы достичь строгой типизации ключа типа элемента приложения.

    Код:
    
    type OmitAny<T> = {
        [
    K in keyof T as 0 extends (1 & T[K]) ? never : K]: T[K]
    }


    function 
    groupBy<D extends ItemData, P extends ItemData>(items: ApplicationItem<D, P>[], key: keyof OmitAny<D>): { [key: string]: ApplicationItem<D, P>[] } {
        return 
    items.reduce(function (result, item) {
            const 
    result_key = item.data[key].id;
            if (!
    result[result_key]) {
                
    result[result_key] = [];
            }
            
    result[result_key].push(item);
            return 
    result;
        }, {});
    }

    Пример проверки типа.
    [​IMG]