DEV Community

Cover image for Recriando o método lodash partition() em vanilla JS
doug-source
doug-source

Posted on • Edited on

Recriando o método lodash partition() em vanilla JS

Nota: apenas traduzi o texto abaixo e postei aqui.

Veremos agora como fazer a mesma coisa com o método _.partition().

O método _.partition() "split" um array em dois grupos: um para itens que atendem a alguns critérios e o segundo para itens que não atendem.

Para começar, vamos criar uma partition() helper function. Aceitaremos dois arguments: o array a ser dividido em dois e a "criteria" pela qual vamos dividi-lo.

var partition = function (arr, criteria) {
    // Faça as coisas aqui...
};
Enter fullscreen mode Exit fullscreen mode

Dentro da helper function, retornaremos um novo array.

var partition = function (arr, criteria) {
    return ;
};
Enter fullscreen mode Exit fullscreen mode

Com o método lodash _.partition(), o primeiro item no array retornado é um array de itens que "match" à criteria e o segundo são os itens que não "match".

Usaremos o método Array.filter() para ambos.

Para o argument criteria, aceitaremos uma function para validação. Usaremos isso como está em nossa primeira instância de Array.filter() e usaremos um bang operator (!) para verificar se há falsidade na segunda.

var partition = function (arr, criteria) {
    return [
        arr.filter(function (item) {
            return criteria(item);
        }),
        arr.filter(function (item) {
            return !criteria(item);
        }),
    ];
};
Enter fullscreen mode Exit fullscreen mode

Aqui está um exemplo do site lodash, mas usando nosso próprio método partition().

var users = [
    {'user': 'barney', 'age': 36, 'active': false},
    {'user': 'fred', 'age': 40, 'active': true},
    {'user': 'pebbles', 'age': 1, 'active': false}
];

// O primeiro array contém "fred"
// O segundo contém "barney" e "pebbles"
partition(users, function (user) {
    return user.active;
});
Enter fullscreen mode Exit fullscreen mode

UPDATE:

Abaixo segue outra versão, sem utilizar a filter function:

const partition = function (arr, criteria) {
    const outputLeft = [];
    const outputRight = [];

    for (const item of arr) {
        if (criteria(item)) {
            outputLeft.push(item);
        } else {
            outputRight.push(item);
        }
    }
    return [outputLeft, outputRight];
};
Enter fullscreen mode Exit fullscreen mode

Fonte

Newsletter de Go Make Things

Top comments (0)