achei legal fazer com reduce()
e date
também
const echo = console.log;
const cliente = {
nome: 'Victor Rodrigues',
nasc: Date('1998/09/18'),
cpf: '41999233319',
email: 'victortavi@outlook.com',
telefones: [18996811971, 18997342222],
filhos: [
{
name: 'João',
nasc: new Date('2005/09/18')
},
{
name: 'Maria',
nasc: new Date('2001/05/10')
}
]
};
cliente['filhos'].push({
name: 'Emilly',
nasc: new Date('2007/12/13')
});
const filhoMaisVelho = cliente['filhos'].reduce((maisVelho, atual) => {
if (atual['nasc'] < maisVelho['nasc'])
return atual;
return maisVelho;
}, { semFilhos: 'Sem Filhos', nasc: new Date() });
echo(filhoMaisVelho);
dai deu pra retornar o objeto em si, e não um array com ele, já q é só uma ocorrência
Ou embutido no objeto.
const echo = console.log;
const cliente = {
nome: 'Victor Rodrigues',
nasc: new Date('1998/09/18'),
cpf: '41999233319',
email: 'victortavi@outlook.com',
telefones: [18996811971, 18997342222],
filhos: [
{
name: 'João',
nasc: new Date('2005/09/18')
},
{
name: 'Maria',
nasc: new Date('2001/05/10')
},
{
name: 'Emilly',
nasc: new Date('2007/12/13')
}
],
obterFilhoMaisVelho: function () {
return this['filhos'].reduce((maisVelho, atual) => {
if (atual['nasc'] < maisVelho['nasc'])
return atual;
return maisVelho;
}, { semFilhos: 'Sem Filhos', nasc: new Date() });
}
};
echo(cliente.obterFilhoMaisVelho());
vale lembrar que a partir do ES6, o método de um objeto pode ser resumido para
//...
nasc: new Date('2007/12/13')
}
],
obterFilhoMaisVelho() {
return this['filhos'].reduce((maisVelho, atual) => {
if (atual['nasc'] < maisVelho['nasc'])
return atual;
return maisVelho;
}, { semFilhos: 'Sem Filhos', nasc: new Date() });
}
};
echo(cliente.obterFilhoMaisVelho());
eliminando o uso da palavra function
.
E com mais uma pitada de açúcar sintático, com operador ternário:
//...
nasc: new Date("2007/12/13"),
},
],
obterFilhoMaisVelho() {
return this["filhos"].reduce(
(maisVelho, atual) =>
atual["nasc"] < maisVelho["nasc"] ? atual : maisVelho,
{ semFilhos: "Sem Filhos", nasc: new Date() }
);
}
};
echo(cliente.obterFilhoMaisVelho());