Удаление дубликатов из массива объектов по ключу – частая задача при работе с данными. Особенно важно эффективно очищать такие массивы, если они содержат повторяющуюся информацию, чтобы избежать избыточности и повысить производительность обработки данных. Рассмотрим несколько подходов для удаления дубликатов из массива объектов по ключу.
1. Использование Map
Map позволяет хранить уникальные ключи, что делает его отличным инструментом для фильтрации массива. Сохраняя уникальные значения в Map, мы можем удалить дубликаты на основе указанного ключа.
const removeDuplicatesByKey = (array, key) => {
const map = new Map();
return array.filter((item) => {
const value = item[key];
if (!map.has(value)) {
map.set(value, true);
return true;
}
return false;
});
};
// Пример
const data = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 1, name: "Alice" },
];
const uniqueData = removeDuplicatesByKey(data, "id");
console.log(uniqueData);
Этот метод подходит для массивов небольшого и среднего размера, так как Map сохраняет порядок элементов.
2. Использование reduce
Метод reduce позволяет аккумулировать значения, поэтому мы можем воспользоваться им для проверки уникальности. При каждом добавлении объекта в новый массив мы можем проверять, добавлен ли уже объект с таким ключом.
const removeDuplicatesByKey = (array, key) => {
return array.reduce((accumulator, current) => {
if (!accumulator.some(item => item[key] === current[key])) {
accumulator.push(current);
}
return accumulator;
}, []);
};
// Пример
const data = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 1, name: "Alice" },
];
const uniqueData = removeDuplicatesByKey(data, "id");
console.log(uniqueData);
3. Использование Set и преобразование объектов в JSON
Когда нужно удалить дубликаты, а уникальные объекты имеют сложную структуру, можно воспользоваться Set, который хранит только уникальные значения.
const removeDuplicatesByKey = (array, key) => {
const seen = new Set();
return array.filter((item) => {
const value = item[key];
if (!seen.has(value)) {
seen.add(value);
return true;
}
return false;
});
};
// Пример
const data = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 1, name: "Alice" },
];
const uniqueData = removeDuplicatesByKey(data, "id");
console.log(uniqueData);
4. Использование временного объекта для хранения уникальных значений
Используя временный объект, можно легко проверить, существует ли уже элемент с таким ключом в результирующем массиве.
const removeDuplicatesByKey = (array, key) => {
const seen = {};
return array.filter((item) => {
const value = item[key];
if (!seen[value]) {
seen[value] = true;
return true;
}
return false;
});
};
// Пример
const data = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 1, name: "Alice" },
];
const uniqueData = removeDuplicatesByKey(data, "id");
console.log(uniqueData);
Таким образом, выбор метода удаления дупликатов объектов в массиве средствами JavaScript зависит от требований задачи, размера массива и сложности данных.