Вы можете использовать уменьшение, если индекс меньше указанного индекса, затем нажать значение, если оно равно, ничего не делать, а если оно больше, минус 1, а затем нажать его:
let a = [1, 3, 5, 7, 9]
const index = 2
console.log(a.reduce((a, e, i) => (i < index ? a.push(e) : i > index && a.push(--e), a), []))
Это тот же код, только что написанный более читабельно:
let a = [1, 3, 5, 7, 9]
const index = 2
console.log(a.reduce((a, e, i) => {
if(i < index) {
a.push(e)
} else if(i > index) {
a.push(--e)
}
return a
}, []))
С точки зрения производительности, этот код является O (n), так как существует только один цикл, но и ваш код.Я бы не беспокоился о производительности, я бы волновался, если бы вы пытались обработать что-то, что зависит от производительности от внешнего интерфейса.