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

基于cod和art属性去除对象数组重复项:函数结果异常求助

问题排查与解决

我来帮你拆解这个问题的根源,以及给出修复方案~

问题核心原因

你的过滤逻辑里,用来判断重复的键生成方式完全错误:
你用了el.cod && el.art作为哈希对象的键,但这是逻辑与运算,不是把两个值组合成唯一标识:

  • 当el.cod是真值(比如1.13、1.14这类数字),el.cod && el.art的结果直接等于el.art的值
  • 所以{cod:1.13, art:'BCC'}和{cod:1.14, art:'BCC'}的键都会变成'BCC',后者会被误判为重复项过滤掉,这就是你只得到2条数据的原因

修正后的代码

我们需要把cod和art组合成一个唯一的字符串键,比如用模板字符串${el.cod}-${el.art},这样不同的cod+art组合会生成不同的键。修改后的代码如下:

data = [
  { cod: 1.13, art: 'BCC' },
  { cod: 1.13, art: 'BCC' },
  { cod: 1.13, art: 'BCC' },
  { cod: 1.14, art: 'BCC' },
  { cod: 1.14, art: 'BCC' },
  { cod: 1.13, art: 'AAA' },
  { cod: 1.13, art: 'AAA' }
];

ngOnInit() {
  var filtered = this.data.filter(function(el) {
    // 生成唯一的组合键
    const uniqueKey = `${el.cod}-${el.art}`;
    if (!this[uniqueKey]) {
      this[uniqueKey] = true;
      return true;
    }
    return false;
  }, Object.create(null));
  console.log(filtered);
}

验证结果

运行这段代码后,filtered会完美匹配你的预期输出:

[
  { cod: 1.13, art: 'BCC' },
  { cod: 1.14, art: 'BCC' },
  { cod: 1.13, art: 'AAA' }
]

额外小提示

如果你的cod是计算生成的浮点数(可能存在精度差异),可以考虑固定小数位数后再组合键,避免因为精度问题导致的误判,比如:

const uniqueKey = `${el.cod.toFixed(2)}-${el.art}`;

内容的提问来源于stack exchange,提问作者John w.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:17:36