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的其他位置是的。如果你问的是性能问题,那么请更改标题以反映这一点。你实际上要求的是如何在不复制的情况下修改数组。我认为你的代码已经足够好了。