Tenho um arquivo JSON contendo alguns dados que gostaria de acessar no meu site AngularJS. Agora o que eu quero é obter apenas um objeto da matriz. Então, eu gostaria, por exemplo, de Item com id 1.
Os dados são assim:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
Eu gostaria de carregar os dados com a funcionalidade AngularJS $ http como esta:
$http.get("data/SampleData.json");
que está funcionando. Mas como posso agora obter um objeto de dados específico (por id) do array que recebo $http.get
?
Agradeço antecipadamente por sua ajuda.
Cumprimenta o marc
Respostas:
A única maneira de fazer isso é iterar no array. Obviamente, se você tiver certeza de que os resultados estão ordenados por id, você pode fazer uma pesquisa binária
fonte
Usando a solução ES6
Para aqueles que ainda estão lendo esta resposta, se você estiver usando o ES6, o
find
método foi adicionado em matrizes. Portanto, supondo a mesma coleção, a solução seria:Eu iria totalmente para esta solução agora, já que está menos ligada ao angular ou qualquer outro framework. Javascript puro.
Solução angular (solução antiga)
Meu objetivo era resolver esse problema fazendo o seguinte:
Um exemplo de caso de uso:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
fonte
Para quem está olhando este post antigo, esta é a maneira mais fácil de fazer isso atualmente. Requer apenas um AngularJS
$filter
. É como a resposta de Willemoes, mas mais curta e fácil de entender.fonte
[0]
faria com que ele retornasse o primeiro resultado que encontrar da coleção, então só funcionaria se sua coleção fosse classificada e o objeto que você está procurando fosse o primeiro que ele encontrasse durante sua iteração. Por exemplo. se houver um id: 12 que vem antes de id: 2, ele retornará id: 12.pessoalmente, eu uso o sublinhado para esse tipo de coisa ... então
então "a" seria a linha que você queria de seu array onde o id era igual a 2
fonte
find
pode potencialmente retornar vários objetos. Como queremos apenas um, podemos usar ofindWhere
que retorna apenas a primeira ocorrência (que sabemos ser a única ocorrência), por exemploa = _.findWhere(results, {id: 2})
.Só quero acrescentar algo à resposta de Willemoes . O mesmo código escrito diretamente dentro do HTML terá a seguinte aparência:
Assumindo que "resultados" é uma variável de seu FooController e você deseja exibir a propriedade "nome" do item filtrado.
fonte
Você pode usar
ng-repeat
e escolher dados apenas se os dados corresponderem ao que você está procurando usando,ng-show
por exemplo:fonte
Você pode simplesmente fazer um loop sobre sua matriz:
Se você não quiser escrever esses loops confusos, você pode considerar o uso de underscore.js ou Lo-Dash (exemplo no último):
fonte
Se você quiser a lista de itens como cidade com base no id do estado, use
fonte
Infelizmente (a menos que eu esteja enganado), acho que você precisa iterar sobre o objeto de resultados.
Pelo menos assim ele sairá da iteração assim que encontrar o id correspondente correto.
fonte
Por que complicar a situação? isso é simples, escreva alguma função como esta:
Caso de uso:
resultado:
fonte
saída: Azərbaycan
fonte
Se possível, projete sua estrutura de dados JSON fazendo uso dos índices de array como IDs. Você pode até "normalizar" seus arrays JSON, contanto que não tenha problemas em usar os índices de array como "chave primária" e "chave estrangeira", algo como RDBMS. Como tal, no futuro, você pode até fazer algo assim:
Esta é a solução "By Design" . Para o seu caso, simplesmente:
Obviamente, se o formato do seu ID for algo como "XX-0001", cujo índice do array é 0 , você pode fazer alguma manipulação de string para mapear o ID; ou então nada pode ser feito a respeito, exceto por meio da abordagem de iteração.
fonte
Sei que é tarde demais para responder, mas é sempre melhor aparecer do que não aparecer :). Forma ES6 de obtê-lo:
fonte
A maneira simples de obter (um) elemento da matriz por id:
O método find () retorna o valor do primeiro elemento na matriz que satisfaz a função de teste fornecida. Caso contrário, undefined é retornado.
você não precisa usar filter () e capturar o primeiro elemento xx.filter () [0] como nos comentários acima
O mesmo para objetos na matriz
Claro, se você tiver vários id, use o método filter () para obter todos os objetos. Felicidades
fonte
Não tenho certeza se é realmente bom, mas foi útil para mim. Eu precisava usar $ scope para fazer funcionar corretamente.
fonte
use $ timeout e execute uma função para pesquisar no array "resultados"
fonte
Gostaria de iterar sobre a matriz de resultados usando um filtro angularjs como este:
var foundResultObject = getObjectFromResultsList (resultados, 1);
fonte