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

基于多列过滤数组去除重复记录的实现方法

问题:基于多字段去重并保留第一条记录

输入数组

let inputArr = [
    {
        "supplierId": "1",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 1",
        "partNumber": "4018992",
        "partDescription": "Description 1"
    },
    {
        "supplierId": "2",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 2",
        "partNumber": "4018992",
        "partDescription": "Description 2"
    },
    {
        "supplierId": "3",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 3",
        "partNumber": "4019030",
        "partDescription": "Description 3"
    },
    {
        "supplierId": "4",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 4",
        "partNumber": "4018291",
        "partDescription": "Description 4"
    },
    {
        "supplierId": "5",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 5",
        "partNumber": "4018992",
        "partDescription": "Description 5"
    }
]

需求

根据baseSupplierId和partNumber的组合值去重,若存在多个组合值相同的记录,仅保留第一条,移除其余重复项。

解决方案

用Array.reduce()方法遍历数组,结合对象记录已出现的组合,实现去重并保留原顺序:

// 记录已出现的baseSupplierId+partNumber组合
const seen = {};
const outputArr = inputArr.reduce((acc, curr) => {
    // 生成唯一标识组合的键
    const key = `${curr.baseSupplierId}_${curr.partNumber}`;
    if (!seen[key]) {
        seen[key] = true;
        acc.push(curr);
    }
    return acc;
}, []);

输出结果

let outputArr = [
    {
        "supplierId": "1",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 1",
        "partNumber": "4018992",
        "partDescription": "Description 1"
    },
    {
        "supplierId": "3",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 3",
        "partNumber": "4019030",
        "partDescription": "Description 3"
    },
    {
        "supplierId": "4",
        "baseSupplierId": "71277",
        "supplierName": "Supplier 4",
        "partNumber": "4018291",
        "partDescription": "Description 4"
    }
]

逻辑说明

  • 用seen对象存储已处理的组合键,确保每个baseSupplierId+partNumber组合只被记录一次。
  • 遍历数组时,若当前记录的组合未出现过,就将其加入结果数组并标记为已出现;若已出现则直接跳过。
  • 该方法处理效率为O(n),且严格保留原数组中重复组合的第一条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:02:58