Javascript 如何在不复制的情况下修改数组,代码不应该使用任何额外的空间,并且应该尽可能高效?

Javascript 如何在不复制的情况下修改数组,代码不应该使用任何额外的空间,并且应该尽可能高效?,javascript,Javascript,我试图在一定条件下修改数组元素,然后删除重复项 这是我的密码: let arr = [2, 3, 4, 1]; arr = arr.map(item => item > 2 ? 0 : item); // zero elements larger than 2 arr = Array.from(new Set(arr)); // remove duplicates console.log(arr); 结果: [2, 0, 1] 虽然这是可行的,但它复制了修改后的数组,我认为这并不

我试图在一定条件下修改数组元素,然后删除重复项

这是我的密码:

let arr = [2, 3, 4, 1];
arr = arr.map(item => item > 2 ? 0 : item); // zero elements larger than 2
arr = Array.from(new Set(arr)); // remove duplicates
console.log(arr);
结果:

[2, 0, 1]
虽然这是可行的,但它复制了修改后的数组,我认为这并不理想


有没有办法使代码更优雅、更高效?

您可以尝试
reduce
。下面是一个例子,它并不优雅,但可以完成任务:

let arr = [2, 3, 4, 1];

let add_zero = false;

const out = arr.reduce((s, i) => {
  if (i <= 2) {
    s.add(i);
  } else if (!add_zero) {
    add_zero = true;
  }
  return s;
}, new Set());

if (add_zero) {
  out.add(0);
}

console.log(out);
让arr=[2,3,4,1];
让add_zero=false;
const out=arr.reduce((s,i)=>{

if(i如果您不想使用任何额外的空间并对同一数组进行变异

让arr=[2,3,4,1,1,1,1];
为了(让我进来){
如果(arr[i]>2){
arr[i]=0;
}
}
arr=arr.sort();
for(设i=0;i控制台日志(arr);
是否要更改相同的数组?@AkshayBande我想要性能更好的数组?数组中有多少记录?我认为最终用户无法区分是复制数组还是直接修改数组。我认为您做得很好。另外,通过改变原始数组,这可能会影响代码中使用arr的其他位置是的。如果你问的是性能问题,那么请更改标题以反映这一点。你实际上要求的是如何在不复制的情况下修改数组。我认为你的代码已经足够好了。