JavaScript的Array.filter方法是否可直接修改函数传入的数组参数
Array.filter() 方法本身不会修改原数组,仅会返回符合过滤条件的新数组,你之前的写法没有接收和处理filter的返回值,自然无法修改原入参数组。
如果要实现原地修改入参数组,不需要返回新数组,可以用以下两种方案:
方案1:复用filter逻辑,直接替换原数组内容
var removeZero = function(nums) { const nonZeroList = nums.filter(value => value !== 0); // 清空原数组 nums.length = 0; // 将过滤后的内容写入原数组 nums.push(...nonZeroList); }
调用示例:
var someNum = [2,0,9,0,0,34]; removeZero(someNum); // 此时someNum的值为 [2,9,34]
方案2:双指针原地修改(无额外数组开销,性能更高)
不需要创建临时的过滤后数组,直接在原数组上操作:
var removeZero = function(nums) { let writeIndex = 0; // 遍历所有元素 for (let scanIndex = 0; scanIndex < nums.length; scanIndex++) { if (nums[scanIndex] !== 0) { // 非零值写入当前待写位置 nums[writeIndex] = nums[scanIndex]; writeIndex++; } } // 截断数组,丢弃后面的冗余内容 nums.length = writeIndex; }
内容的提问来源于stack exchange,提问作者Yani
相关产品推荐
相关产品推荐

