Лучше всего поменять подход к созданию этой структуры.
А именно, если вам нужно искать по id - сделать отдельный объект (по сути
хеш-таблицу), где ключами будут выступать именно id.
Для существующего массива arrData делается примерно так:
var obj_by_id = {} //хеш-таблица
arrData.forEach( (obj, index) => {
obj_by_id[obj.id] = obj;
obj.index = index;
});
Это немного не честно, но в этом примере индекс я сохраняю в самом объекте.
Далее получить ссылку на объект с id 111 можно будет так:
let o = obj_by_id[111];
o.name = "Kate";
Если нужно заменить, то как-то так:
arrData[obj_by_id[111].index] = { ...... } //новый объект
Естественно, что при такой схеме нужно обновлять obj_by_id при каждом изменении arrData. Это такие операции, как добавление, удаление, всякие там смещения индексов и пр. Да вы и сами это понимаете, надеюсь.
Большой
плюс такого подхода в том, что не нужно перебирать весь массив каждый раз (если исходить из предположения, что он может быть очень большим). А это минимизирует нагрузку на процессор.