Eu tenho uma série de objetos:
Object = {
1 : { name : bob , dinner : pizza },
2 : { name : john , dinner : sushi },
3 : { name : larry, dinner : hummus }
}
Eu quero ser capaz de pesquisar o objeto / matriz para onde a chave é "jantar" e ver se ela corresponde a "sushi".
Eu sei que o jQuery tem $ .inArray, mas não parece funcionar em matrizes de objetos. Ou talvez eu esteja errado. indexOf também parece funcionar apenas em um nível de array.
Não há função ou código existente para isso?
javascript
jquery
arrays
search
Questionador
fonte
fonte
Object
está reservado em Javascript,Object
é o objeto objeto, ou seja, a mãe de todos os objetos.Respostas:
Se você tiver uma matriz como
Você pode usar o
filter
método de um objeto Array:Em implementações de JavaScript mais recentes, você pode usar uma expressão de função:
Você pode pesquisar por pessoas que
"dinner": "sushi"
usam ummap
ou um
reduce
Tenho certeza que você é capaz de generalizar isso para chaves e valores arbitrários!
fonte
grep
método jQuery . Pode fazer sentido rolar em sua resposta, pois é o mesmo conceito que você está fazendo, mas dependente de jQuery e amigável para o navegador de merda.jQuery tem um método embutido
jQuery.grep
que funciona de forma semelhante àfilter
função ES5 da resposta de @adamse e deve funcionar bem em navegadores mais antigos.Usando o exemplo de adamse:
você pode fazer o seguinte
fonte
jsFiddle .
Contanto que
-1
nunca seja uma chave válida.fonte
Se você vai fazer essa pesquisa com frequência, considere alterar o formato do seu objeto para que o jantar seja realmente uma chave. Isso é como atribuir uma chave primária de cluster em uma tabela de banco de dados. Então, por exemplo:
Agora você pode acessá-lo facilmente assim:
Object['sushi']['name']
Ou se o objeto é realmente tão simples (apenas 'nome' no objeto), você pode apenas alterá-lo para:
E então acessá-lo como:
Object['sushi']
.Obviamente, nem sempre é possível ou vantajoso reestruturar seu objeto de dados dessa maneira, mas a questão é que, às vezes, a melhor resposta é considerar se seu objeto de dados está estruturado da melhor maneira. Criar uma chave como essa pode ser mais rápido e criar um código mais limpo.
fonte
Você pode encontrar o objeto na matriz com a biblioteca Alasql :
Experimente este exemplo em jsFiddle .
fonte
Você pode usar um loop for simples:
O exemplo de violino a seguir coloca todos os objetos que contêm
dinner:sushi
em uma matriz:https://jsfiddle.net/3asvkLn6/1/
fonte
Já existem muitas respostas boas aqui, então por que não mais uma, use uma biblioteca como lodash ou sublinhado :)
fonte
Tive que pesquisar uma estrutura de mapa de site aninhada para o primeiro item folha que maquina um determinado caminho. Eu vim com o código a seguir usando apenas
.map()
.filter()
e.reduce
. Retorna o último item encontrado que corresponda ao caminho/c
.fonte
Eu tentaria não reinventar a roda. Usamos a varredura de objetos para todas as nossas necessidades de processamento de dados. É conceitualmente muito simples, mas permite muitas coisas legais. Aqui está como você resolveria sua questão específica
Definição de Dados
Lógica
Resultado
fonte
Se você quiser encontrar um objeto específico por meio da função de pesquisa, tente algo assim:
Este é um exemplo de objeto:
O código irá iterar e encontrar o array "usuário" e procurar o objeto que você procura dentro.
Meu problema era quando o índice da matriz mudava a cada atualização da janela e estava na terceira ou na segunda matriz, mas isso não importa.
Caiu como uma luva para mim!
No seu exemplo, é um pouco mais curto:
fonte