【问题标题】:How to get identical object within array of object in javascript如何在javascript中的对象数组中获取相同的对象
【发布时间】:2020-07-26 18:42:17
【问题描述】:

我有这样的数据:

let objData = [{
    "product_client_id": 24,
    "product_type": "VIRTUAL"
}, {
    "product_client_id": 24,
    "product_type": "VIRTUAL"
}, {
    "product_client_id": 86,
    "product_type": "VIRTUAL"
}, {
    "product_client_id": 86,
    "product_type": "PHYSIC"
}, {
    "product_client_id": 24,
    "product_type": "PHYSIC"
}];

目标是在数组中搜索相同重复的对象,按 product_client_id 和 product_type 过滤,从我上面的数据中我希望像这样输出

[
  {
    "product_client_id": 24,
    "product_type": "VIRTUAL"
  }
]

因为只有上面的数据与数组中的其他对象具有相同的product_client_id和product_type

【问题讨论】:

    标签: javascript arrays object duplicates


    【解决方案1】:

    最直接的解决方案是遍历每个对象并检查数组中是否存在“相似”对象。 例如:

    let dupIdx = [];
    let final = objData.reduce(function(acc1, obj1, idx1) {
        // Don't look at objects already known as dups
        // This is so we don't introduce dups into the final result
        if (dupIdx.indexOf(idx1) === -1) 
            let dups = objData.reduce(function (acc2, obj2, idx2) {
                // Same index or same property values.
                if (idx1 === idx2 ||
                    (obj1.product_client_id === obj2.product_client_id &&
                    obj1.product_type === obj2.product_type)) {
                    acc2.push(idx2)
                }
                return acc2;
            }, []);
    
            if (dups.length > 1) {
               // Add new prop
               obj1.index = dups;
               acc1.push(obj1);
               // Update dup list
               dupIdx = dupIdx.concat(dups);
            }
        }
    
        return acc1;
    }, []);
    

    但是请注意,这对于较大的数组来说效率非常低,因为它是 O(n^2)

    【讨论】:

    猜你喜欢
    • 2022-11-14
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2021-06-30
    • 2016-01-30
    相关资源
    最近更新 更多