В JavaScript работа с массивами объектов — обычная задача. Часто мы сталкиваемся со сценариями, в которых нам необходимо извлечь отдельные объекты на основе двух ключевых свойств. В этой статье блога мы углубимся в различные методы достижения этой цели, приведя попутно примеры кода. Итак, давайте начнем и научимся овладевать этой важной техникой!
Метод 1: использование методов filter()и some()
function extractDistinctObjects(arr, key1, key2) {
return arr.filter((obj, index, self) =>
self.slice(index + 1).some((otherObj) =>
obj[key1] === otherObj[key1] && obj[key2] === otherObj[key2]
)
);
}
Метод 2: использование метода reduce()
function extractDistinctObjects(arr, key1, key2) {
return arr.reduce((acc, obj) => {
const found = acc.some(
(item) => item[key1] === obj[key1] && item[key2] === obj[key2]
);
if (!found) {
acc.push(obj);
}
return acc;
}, []);
}
Метод 3: использование набора и карты ES6
function extractDistinctObjects(arr, key1, key2) {
const uniqueSet = new Set();
const distinctObjects = arr.filter((obj) => {
const key = `${obj[key1]}_${obj[key2]}`;
if (!uniqueSet.has(key)) {
uniqueSet.add(key);
return true;
}
return false;
});
return distinctObjects;
}
Метод 4. Использование библиотеки lodash
const _ = require('lodash');
function extractDistinctObjects(arr, key1, key2) {
return _.uniqWith(arr, (obj1, obj2) =>
obj1[key1] === obj2[key1] && obj1[key2] === obj2[key2]
);
}
В этой статье мы рассмотрели несколько подходов к извлечению отдельных объектов из массива на основе двух ключевых свойств. Мы обсудили методы, использующие встроенные функции JavaScript, такие как filter(), some()и reduce(), а также использование ES6 Set и Map. Кроме того, мы продемонстрировали, как популярная библиотека lodash может упростить эту задачу.
Освоив эти методы, вы сможете эффективно манипулировать массивами объектов и извлекать нужные данные. Не забудьте выбрать метод, который соответствует вашим конкретным требованиям и стилю кодирования.