我有这样的数据:
WebFilter
目标是从上面的数据中搜索由数组product_client_id和product_type过滤的,在数组中的相同重复对象,我希望这样输出
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与数组中的其他对象具有相同的数据
答案 0 :(得分:0)
最直接的解决方案是遍历每个对象,并检查数组中是否存在“相似”对象。 例如:
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)