Underscore: Filtrar objetos pode retornar um objeto

Criado em 1 nov. 2011  ·  8Comentários  ·  Fonte: jashkenas/underscore

Oi,

Aqui está um caso de uso comum para filtro. Dado

a = {35: true, 45: true, 55: false}

alguém gostaria de filtrar e receber apenas pares cujo valor é verdadeiro:

_.filter(a, function(val, key) {
  val === true;
});
// => {35: true, 45: true}

Atualmente, funções como filtro push(valor) para obter uma matriz.

Existe alguma maneira fácil de conseguir isso com uma solução alternativa e, se não, você consideraria mudar o tipo de retorno com base no fato de estarmos fornecendo um objeto ou uma lista?

change wontfix

Comentários muito úteis

jk, acabei de ver _.pick que é perfeito para o meu caso de uso

Todos 8 comentários

+1

Eu só precisava da mesma coisa e esse problema foi o segundo git do Google que recebi ao pesquisar. O único problema em fazer _.filter em objetos retornar objetos é a compatibilidade com versões anteriores...

filter é uma função originada no ES5... e certamente não queremos quebrar a compatibilidade básica com a especificação.

Para abordar o quadro geral: Todas as funções enumeráveis ​​Underscore.js podem receber objetos ou matrizes e todas retornam matrizes. Quebrar a consistência aqui precisaria ser feito para todas as funções de uma só vez, não apenas uma delas. A API atual permite compor funções de sublinhado sem ter que se preocupar com os tipos de entrada.

Eu adicionei funções de filtro e rejeição a essas funções de mapa de rastreamento de mixagem para objetos com persistência de chave/val:

https://gist.github.com/3430971

+1

+1 Vocês poderiam adicionar _.filterObj (etc) um de cada vez, semelhante a _.mapObj ?

jk, acabei de ver _.pick que é perfeito para o meu caso de uso

@jtfairbank exatamente o que eu preciso e provavelmente o que a maioria das pessoas precisa quando vêm aqui procurando 'filtrar' um objeto e criar um objeto.

Esta página foi útil?
0 / 5 - 0 avaliações