Фильтр свойства и формата значений, если они являются валюты


Функцию я написал в TypeScript работает отлично, но я не уверен, что это самое чистое и наиболее эффективное функция.

Эта функция принимает объект, не обладающей свойствами найден в массиве, и делает чек, чтобы увидеть, если любой из объектов в массиве currencyFields. Затем она возвращается как карту свойства, и отсортированный массив объектов, где каждый объект-это как ключ и значение.

Этот отформатированный и отфильтрованный данные затем она отображается в шаблоне angular5, где я перебрать массив, и использовать карту, чтобы отобразить быстрый профиль человека. Потому что угловой это *ngFor Не есть хороший способ прохода на объект без написания пользовательских функций, я решила просто вернуть как объект и массив, который я мог бы использовать.

Вопросы:

Мне нравится использовать лодашь функциональное программирование подход, но я с трудом факторинг-вне if заявление от reduce функция. Было бы здорово писать что-то вроде _.chain(properties).omit().reduce()..... Это возможно? Возможно, я слишком подсела на "взгляде" кодекса.

Для properties аргумент, вполне себе object типа, но был Interface. Я убрал интерфейс, потому что любое число объектов, если они находятся в showPropertiesOnlyIfDataExists массив может быть удален, и я не хочу, чтобы каждый интерфейс собственность необязательно, так вместо этого, я пошел по умолчанию тип объекта. Я думал об этом, правильно?

export interface IPropDetails {
    showNo1: string;
    showNo2: string;
    name: string;
    address: string;
    city: string;
    state: string;
    country: string;
    salary: string;
    bonus: string;
    manager: boolean;
}


// using a config file where these are defined so just stubbing these here for now
const showPropertiesOnlyIfDataExists: string[] = ['showNo1', 'showNo2'];
const currencyFields: string[] = ['salary', 'bonus'];

const formatValuesAndFilterProperties = (properties: object): {map: object, list: object[]} => {

    const filteredProps: {} = _.omit(properties, showPropertiesOnlyIfDataExists);

    const filteredPropsAndFormatCurrencyValues: {} = _.reduce(filteredProps, (acc, value, key) => {
        if (currencyFields.includes(key) && _.isNumber(value)) {
            value = this.convertPropertyValueToCurrency(value);
        }

        acc[key] = value;
        return acc;
    }, {});

    return {
        map: filteredPropsAndFormatCurrencyValues,
        list: _.sortBy(_.map(filteredPropsAndFormatCurrencyValues, (value, key) => ({key: key, value: value})), o => o.key)
    };

}


const exampleData: object = {
    showNo1: '',
    showNo2: 'show no 2',
    name: 'Jim Smit',
    address: '123 elm',
    city: 'portland',
    state: 'OR',
    country: 'USA',
    salary: '100000',
    bonus: '40000',
    manager: true
};

formatValuesAndFilterProperties(exampleData);


374
3
задан 31 марта 2018 в 07:03 Источник Поделиться
Комментарии