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)