Вы можете сделать ранний выход, когда объект найден, так что вам не придется перебирать оставшуюся часть массива:
function selectElementByName(name) {
for (var i = 0; i < things.length; i++) {
if (things[i].name === name) {
return things[i];
}
}
console.log("Object not found");
}
(Это, однако, изменит поведение, если есть дубликаты, так что он возвращает первый найденный объект вместо последнего.)
Если имена уникальны, вы можете использовать их в качестве ключа и сохранять объекты в объекте, а не в массиве:
var things = {
"thing1": { "name": "thing1", "sex": "male"},
"thing2": { "name": "thing2", "sex": "female"}
};
Тогда вам не понадобится цикл, чтобы найти объект:
function selectElementByName(name) {
return things[name];
}
Если вам нужны объекты в массиве, вы все равно можете создать индекс для поиска, если массив не меняется так часто:
var thingsNameIndex = {};
for (var i = 0; i < things.length; i++) {
thingsNameIndex[things[i].name] = i;
}
Теперь вы можете использовать индекс, чтобы найти объект:
function selectElementByName(name) {
return things[thingsNameIndex[name]];
}
Поскольку вы должны обновить или воссоздать индекс, как только массив изменится, это будет полезно только в том случае, если вы выполняете поиск в массиве гораздо чаще, чем изменяете массив.