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

JavaScript filter方法未返回数组首元素 console.log显示已返回问题排查

问题根因

你代码的问题出在filter回调的返回值逻辑上:

  • Array.prototype.filter的回调要求返回布尔值,返回真值时当前元素才会被保留到结果数组,返回假值则会被过滤。
  • 你在条件成立时直接返回了当前元素el,当el等于0时,0属于JavaScript的假值,哪怕条件成立,filter也会判定返回值为false,直接把0过滤掉。
    你看到控制台打印了return 0,只能说明el != a[i-1]的判断通过进入了分支,但不代表filter会保留当前元素,问题就出在返回值的类型上。

另外还有一个隐藏隐患:Array.prototype.sort()默认按字符串Unicode码点排序,处理大于10的数字时会出现排序错误,比如[10, 2]默认排序会得到[10, 2],处理数字数组需要传入比较函数(a, b) => a - b。

修复代码

将filter的返回值改为布尔值,同时修正排序逻辑即可:

const arr1 = [1, 2, 3, 4, 5];
const arr2 = [2, 3, 1, 0, 5];

// 合并两个数组
const combined = arr1.concat(arr2);

// 修正数字排序逻辑
combined.sort((a, b) => a - b);

// 过滤掉和前一个元素相同的元素
const result = combined.filter((el, i, a) => {
  // 直接返回布尔判断结果,不要返回元素本身
  return el !== a[i-1];
});

// 打印结果
console.log(result); // 输出 [0, 1, 2, 3, 4, 5]

更简洁的实现方案

如果不需要兼容过低版本浏览器,用Set去重代码更精简:

const result = [...new Set([...arr1, ...arr2])].sort((a, b) => a - b);

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:24:09