const result = arr.map(function(n) {
return this[n];
}, Object.fromEntries(sum.map(n => [ n.id, n.name ])));
// или
const result = arr.map(Map.prototype.get.bind(new Map(sum.map(n => [ n.id, n.name ]))));
// или
const result = arr.map(n => sum.find(m => m.id === n)?.name);
Но что если в массиве
sum
отсутствуют некоторые из нужных элементов, а получать
undefined
внутри массива с результатами не хочется?
Можно подставлять вместо отсутствующих элементов какое-нибудь другое значение:
const names = Object.fromEntries(sum.map(n => [ n.id, n.name ]));
const result = arr.map(n => names[n] ?? `объекта с id=${n} нет`);
Или, есть вариант получать только то, что существует:
const names = new Map(sum.map(n => [ n.id, n.name ]));
const result = arr.reduce((acc, n) => ((n = names.get(n)) && acc.push(n), acc), []);