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... };
Dentro da helper function, retornaremos um novo array.
var partition = function (arr, criteria) { return ; };
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); }), ]; };
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; });
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]; };
Fonte
Newsletter de Go Make Things
Top comments (0)