Как получить идентичный объект в массиве объекта в javascript - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть такие данные:

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 с другим объектом в массиве

1 Ответ

0 голосов
/ 14 апреля 2020

Самое простое решение - это l oop через каждый объект и проверить, существует ли "похожий" объект в массиве. Например:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...