52ky 发表于 2022-5-3 12:16:14

如何在javascript中的对象数组中获取相同的对象

问题
我有这样的数据:
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和数组中的其他对象是一样的

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

例如:
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)



页: [1]
查看完整版本: 如何在javascript中的对象数组中获取相同的对象