Javascript 需要将元素替换为数组中右侧元素的最大值

Javascript 需要将元素替换为数组中右侧元素的最大值,javascript,arrays,Javascript,Arrays,我需要将数组中的每个元素替换为属于该数组中右侧元素集的max元素。我得到了一个具有以下代码的解决方案: let arr1 = [5,0,5,7,9,4,8]; var temp = []; for (var i = 1; i < arr1.length + 1; i++) { if (i !== arr1.length) { temp = [...arr1].slice(i); arr1[i-1] = Math.max(...temp);

我需要将
数组中的每个元素
替换为属于该数组中右侧元素集的max元素。我得到了一个具有以下代码的解决方案:

let arr1 = [5,0,5,7,9,4,8];
var temp = [];

for (var i = 1; i < arr1.length + 1; i++)
{
    if (i !== arr1.length)
    {
        temp = [...arr1].slice(i);
        arr1[i-1] = Math.max(...temp);
    }
    else
    {
        arr1[i-1] = arr1[arr1.length - 1];
    } 
}

console.log(arr1);
你可以用。请注意,这种方法也不会改变原始数组

设arr1=[5,0,5,7,9,4,8];
设res=arr1.map(
(n,idx,arr)=>(idx
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装器{max height:100%!important;top:0;}
您可以通过向后迭代并跟踪最大值来将性能提高到O(n)(因为您当前的实现是O(n^2)):

var arr1=[5,0,5,7,9,4,8];
var max=arr1[arr1.length-1];
对于(变量i=arr1.length-1;i>=0;i--){
var curr=arr1[i];
arr1[i]=最大值;
如果(电流>最大值)最大值=电流;
}

控制台日志(arr1)
为什么
9
8
的值是
8
,如果对于
8
您有
8
?@NinaScholz对于
9
,右侧的元素集是
[4,8]
,因此在这种情况下,它被它们的最大值替换为
8
。而对于
8
(最后一个元素),右侧没有元素,因此不会被替换。我相信,这就是背后的逻辑,至少是我所理解的。
Input : [5,0,5,7,9,4,8]
Output: [9,9,9,9,8,8,8]