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)