Если в проекте используется jQuery то, думаю, есть смысл обратиться к
jQuery.grep:
var source = [{
id:123,
name: 'Name1'
},{
id: 321,
name: 'Name2'
}];
function getObject(source, id) {
return jQuery.grep(source, function(e){ return e.id == id; });
}
console.log(getObject(source, 321));
Если массив не очень большой, то простого перебора возможно будет вполне достаточно:
function getObject(source, id) {
for (var i = 0, len = source.length; i < len; i++) {
if (source[i].id == id) {
return source[i];
}
}
}
Если есть возможность использовать ECMAScript 6, то можно обратиться к его нативной функции (для "старых" браузеров можно подключить
этот полифил):
function getObject(source, id) {
return source.find(function (el) {
return el.id === id;
});
}
Или прибегнуть к хорошо поддерживаемому методу
filter:
function getObject(source, id) {
return source.filter(function(el) {
return el.id === id;
})[0];
}
Какой из методов покажет покажет себя лучше у вас - тот и используйте. Для тестов просто прогоните каждый, например, так:
console.time('test_func_exec');
for (var i = 0; i < 10000000; i++) {
getObject(source, 123);
}
console.timeEnd('test_func_exec');
Запустив каждый с десяток раз на "боевых" данных, и взяв среднее время выполнения каждого (тестирование, как я полагаю, вы будете производить в браузере).
Хорошего вам дня!