Tengo un archivo JSON que contiene algunos datos a los que me gustaría acceder en mi sitio web AngularJS. Ahora lo que quiero es obtener solo un objeto de la matriz. Así que me gustaría, por ejemplo, el artículo con id 1.
Los datos se ven así:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
Me gustaría cargar los datos con la funcionalidad AngularJS $ http como esta:
$http.get("data/SampleData.json");
que está funcionando. Pero, ¿cómo puedo obtener un objeto de datos específico (por id) de la matriz de la que obtengo $http.get
?
Gracias de antemano por tu ayuda.
Saluda a Marc
Respuestas:
La única forma de hacer esto es iterar sobre la matriz. Obviamente, si está seguro de que los resultados están ordenados por id, puede hacer una búsqueda binaria
fuente
Usando la solución ES6
Para aquellos que aún leen esta respuesta, si está utilizando ES6, el
find
método se agregó en matrices. Entonces, asumiendo la misma colección, la solución sería:Yo optaría totalmente por esta solución ahora, ya que está menos vinculado a angular o cualquier otro marco. Javascript puro.
Solución angular (solución anterior)
Apunté a resolver este problema haciendo lo siguiente:
Un ejemplo de caso de uso:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
fuente
Para cualquiera que esté mirando esta publicación anterior, esta es la forma más fácil de hacerlo actualmente. Solo requiere un AngularJS
$filter
. Es como la respuesta de Willemoes, pero más breve y más fácil de entender.fuente
[0]
haría que devolviera el primer resultado que encuentra de la colección, por lo que solo funcionaría si su colección está ordenada y el objeto que está buscando es el primero que encuentra durante su iteración. P.ej. si hay un id: 12 que viene antes del id: 2, devolvería id: 12.personalmente utilizo guión bajo para este tipo de cosas ...
entonces "a" sería la fila que deseaba de su matriz donde la identificación era igual a 2
fuente
find
potencialmente puede devolver varios objetos. Como solo queremos uno, podemos usar elfindWhere
que solo devuelve la primera aparición (que sabemos que es la única aparición), por ejemploa = _.findWhere(results, {id: 2})
.Solo quiero agregar algo a la respuesta de Willemoes . El mismo código escrito directamente dentro del HTML se verá así:
Suponiendo que "resultados" es una variable de su FooController y desea mostrar la propiedad "nombre" del elemento filtrado.
fuente
Puede usar
ng-repeat
y seleccionar datos solo si los datos coinciden con lo que está buscando usando,ng-show
por ejemplo:fuente
Puede simplemente recorrer su matriz:
Si no desea escribir estos bucles desordenados, puede considerar usar underscore.js o Lo-Dash (ejemplo en este último):
fuente
Si desea la lista de elementos como ciudad sobre la base de la identificación del estado, use
fuente
Desafortunadamente (a menos que me equivoque), creo que debe iterar sobre el objeto de resultados.
Al menos de esta manera, saldrá de la iteración tan pronto como encuentre la identificación correcta.
fuente
¿Por qué complicar la situación? esto es simple escribir alguna función como esta:
Caso de uso:
salida:
fuente
salida: Azərbaycan
fuente
Si puede, diseñe su estructura de datos JSON haciendo uso de los índices de la matriz como ID. Incluso puede "normalizar" sus matrices JSON siempre que no tenga problemas para utilizar los índices de la matriz como "clave principal" y "clave externa", algo así como RDBMS. Como tal, en el futuro, incluso puede hacer algo como esto:
Esta es la solución "por diseño" . Para su caso, simplemente:
Por supuesto, si su formato de ID es algo así como "XX-0001" del cual su índice de matriz es 0 , entonces puede realizar alguna manipulación de cadena para mapear el ID; de lo contrario, no se puede hacer nada al respecto, excepto mediante el enfoque de iteración.
fuente
Sé que llegué demasiado tarde para responder, pero siempre es mejor aparecer en lugar de no aparecer :). ES6 forma de conseguirlo:
fuente
La forma simple de obtener (un) elemento de la matriz por id:
El método find () devuelve el valor del primer elemento de la matriz que satisface la función de prueba proporcionada. De lo contrario, se devuelve undefined.
no es necesario utilizar filter () y capturar el primer elemento xx.filter () [0] como en los comentarios anteriores
Lo mismo para los objetos en matriz.
Por supuesto, si tiene una identificación múltiple, use el método filter () para obtener todos los objetos. Salud
fuente
No estoy seguro de si es realmente bueno, pero esto fue útil para mí. Necesitaba usar $ scope para que funcione correctamente.
fuente
use $ timeout y ejecute una función para buscar en la matriz de "resultados"
fuente
Iteraría sobre la matriz de resultados usando un filtro angularjs como este:
var foundResultObject = getObjectFromResultsList (resultados, 1);
fuente