рони,
А такой вариант не оптимальнее? Я имею ввиду по скорости.
let fn = (arr, p, n) => {
arr = JSON.parse( JSON.stringify(arr).repeat(p).replace(/\]\[/g,',') );
arr.splice(arr.lastIndexOf(n) + 1);
return arr;
}
alert(fn([1,2,3,4,5], 2, 3));
alert(fn([1,2,3,4,5], 3, 3));