Я провел тестирование производительности различных ответов, которые каждый может запустить самостоятельно:
https://jsperf.com/find-index-of-object-in-array-by-contents
Исходя из моих начальных тестов в Chrome, следующий метод (с использованием цикла for, настроенного внутри прототипа) является самым быстрым:
Array.prototype.indexOfObject = function (property, value) {
for (var i = 0, len = this.length; i < len; i++) {
if (this[i][property] === value) return i;
}
return -1;
}
myArray.indexOfObject("hello", "stevie");
Этот код является слегка измененной версией ответа Натана Заетты.
В тестах производительности я попробовал это сделать с целью, находящейся в середине (индекс 500) и в самом конце (индекс 999) массива объектов 1000, и даже если я поставил цель как самый последний элемент в массив (это означает, что он должен пройти через каждый отдельный элемент в массиве, прежде чем он найден), он все равно оказывается самым быстрым.
Преимущество этого решения в том, что оно является одним из самых кратких для многократного выполнения, поскольку необходимо повторять только последнюю строку:
myArray.indexOfObject("hello", "stevie");