A menudo tengo la necesidad de buscar una matriz de JavaScript que contenga objetos. Quiero buscar un objeto en la matriz que tenga una coincidencia de propiedad. Por ejemplo, buscar en una matriz de objetos Persona donde se encuentra la identificación/clave de la persona === "ABC123"¿Existe una mejor manera de buscar una matriz de JavaScript que utilizar jQuery cada uno?
Se puede hacer fácilmente usando jQuery usando el método $ .each, que es lo que establecí. Puedes ver el ejemplo aquí en jsFiddle. http://jsfiddle.net/johnpapa/EJAFG/
Me pregunto si alguien más ha encontrado una manera más rápida y/o mejor para hacer esto?
var Person = function(code, name) {
this.code = code;
this.name = name;
};
var people = [
new Person("ABC123", "Tooth Fairy"),
new Person("DEF456", "Santa Claus"),
new Person("PIR000", "Jack Sparrow"),
new Person("XYZ987", "Easter Bunny")
];
var utils = {};
// Could create a utility function to do this
utils.inArray = function(searchFor, property) {
var retVal = -1;
$.each(this, function(index, item) {
if (item.hasOwnProperty(property)) {
if (item[property].toLowerCase() === searchFor.toLowerCase()) {
retVal = index;
return false;
}
}
});
return retVal;
};
// or we could create a function on the Array prototype indirectly
Array.prototype.inArray = utils.inArray;
// let's use the prototype for now
var i = people.inArray("PIR000", "code");
$('#output').text(people[i].name);
hay gran cantidad de preguntas similares a éste, pero todavía tengo que ver uno con una solución que no sea la iteración (como lo hice aquí).
Entonces la pregunta es ... ¿hay una manera mejor?
Hay una pregunta similar [aquí] [1]. [1]: http://stackoverflow.com/questions/1144423/jquery-selectors-for-plain-javascript-objects-instead-of-dom-elements –
Ver http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array y http://stackoverflow.com/questions/237104/array-containsobj-in-javascript – j08691
@ j08691 ambos están comprobando si existe una coincidencia de objeto exacta. Para aquellos, $ .inArray funciona bien. Estoy buscando una búsqueda por clave. –