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

JavaScript如何过滤数组仅保留无重复及无对应相反数的元素

JavaScript 数组按规则过滤实现方案

核心规则拆解

过滤需求可拆为两个排除条件,满足任意一条的元素就需要剔除:

  • 相同值在数组中出现次数≥2
  • 数组中同时存在该值和它的相反数
    只有两个条件都不满足的元素,才会保留到最终结果中。

实现代码

const arrOne = [1, 1, 2, 3, 4, 6, 6, 7, -7, 8, -8];

// 第一步:统计每个值的出现频率
const freqMap = arrOne.reduce((map, num) => {
  map.set(num, (map.get(num) || 0) + 1);
  return map;
}, new Map());

// 第二步:去重后按条件过滤,避免重复判断相同值
const uniqueArr = [...new Set(arrOne)];
const result = uniqueArr.filter(num => {
  // 仅保留:当前值出现次数为1,且不存在相反数
  return freqMap.get(num) === 1 && !freqMap.has(-num);
});

console.log(result); // 输出 [2, 3, 4]

逻辑说明

  • 先用reduce遍历原数组生成频率Map,O(n)时间复杂度完成所有值的出现次数统计
  • 用Set对原数组去重,减少后续过滤的遍历次数
  • 过滤时同时判断两个保留条件,最终得到符合要求的结果
  • 方案默认兼容0的场景:0的相反数是自身,只要出现次数≥2就会自动剔除,无需额外修改逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:00