Skip to content

Add converge analog from ramda #54

@sp3ber

Description

@sp3ber

In some cases i need converge function, f.e.
`
const extractOfferSuggestions = pathOr(["offerSuggestions"], []);
const extractWordSuggestions = pathOr(["wordSuggestions"], []);
const mapSuggestionsToOptions = (suggestions): SuggestOption[] => [];

// without converge
const transformSuggestionsToOptions = suggestions => {
const wordSuggestions = extractWordSuggestions(suggestions);
const offerSuggestions = extractOfferSuggestions(suggestions);
return mapSuggestionsToOptions({
offerSuggestions,
wordSuggestions
});
};

// with converge
const transformSuggestionsToOptions = converge(
([wordSuggestions, offerSuggestions]) =>
mapSuggestionsToOptions({ offerSuggestions, wordSuggestions }),
[extractWordSuggestions, extractOfferSuggestions]
);
// or with other mapSuggestionsToOptions signature (two params instead of one object param)
const transformSuggestionsToOptions = converge(
mapSuggestionsToOptions,
[extractWordSuggestions, extractOfferSuggestions]
);
`
Some points on this combinator https://jrsinclair.com/articles/2019/compose-js-functions-multiple-parameters/

I think, createSelector from 'reselect' has the same idea (but with memoization)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions