Мне часто приходится искать массив javascript, содержащий объекты. Я хочу искать объект в массиве, который имеет свойство. Например, поиск массива объектов Person, для которых id/ключ человека === "ABC123"
Это можно сделать довольно легко, используя jQuery, используя метод $.each, и это то, на чем я остановился. Вы можете увидеть пример здесь в jsFiddle. http://jsfiddle.net/johnpapa/EJAFG/
Мне интересно, нашел ли кто-нибудь еще более быстрый и/или лучший способ сделать это?
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 use the prototype for now
var i = people.inArray("PIR000", "code");
$('#output').text(people[i].name);
Есть много вопросов, подобных этому, но мне еще предстоит увидеть одно решение, отличное от итерации (как, например, здесь).
Итак, вопрос... есть ли лучший способ?