Почему избыточность. Потому что нельзя выкидывать id из объекта, несмотря на идентичное значение в качестве ключа. Вот смотри
var num={
1:{"id": 1, "name": "Один"},
2:{"id": 2, "name": "Два"},
3:{"id": 3, "name": "Три"}
},
search=2,
stdout=function(obj){
console.log('ID='+obj.id + '; Name='+obj.name);
};
if(search in num)
stdout(num[search]);
Если id выкинуть, то придется передавать его отдельно. Даже если ты веришь, что избыток не понадобится - оставь его. Мемори на клиенте как гавна.