You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:39:00