Освоение JavaScript: изучение различных методов извлечения различных объектов по двум ключам

В 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 может упростить эту задачу.

Освоив эти методы, вы сможете эффективно манипулировать массивами объектов и извлекать нужные данные. Не забудьте выбрать метод, который соответствует вашим конкретным требованиям и стилю кодирования.