Идентифицировать уникальные объекты в массиве на основе заданного значения c - PullRequest
1 голос
/ 11 марта 2020

У меня есть следующий массив объектов, и мне нужно идентифицировать уникальные объекты из этого массива на основе ключа img1. Мне удалось определить уникальные значения, связанные с ключом img1, но не связанное с ним значение ключа img2.

Код, который у меня есть на данный момент,

const imgs_arr = [
    ...new Set(
      input_arr.map(item => {img_1: item.img1[0]})
    )
  ];
  return imgs_arr;

Массив ввода:

[{img1: ['/path/to/img1'], img2: ['/path/to/img2']},
{img1: ['/path/to/img1'], img2: ['/path/to/img3']},
{img1: ['/path/to/img1'], img2: ['/path/to/img4']},
{img1: ['/path/to/img12'], img2: ['/path/to/img5']},
{img1: ['/path/to/img12'], img2: ['/path/to/img46']},
{img1: ['/path/to/img12'], img2: ['/path/to/img45']},
{img1: ['/path/to/img12'], img2: ['/path/to/img478']}]

Ожидаемый выходной массив:

[{img1: '/path/to/img1', img2: '/path/to/img2'},
{img1: '/path/to/img12', img2: '/path/to/img5'}]

Добавление цвета в вопрос на основе вопросов, которые я получаю в комментариях. Ключ img1 имеет значения, из которых мне нужно найти уникальные значения, а затем найти соответствующее значение ключа img2 из первого совпадения.

Ваша помощь очень важна!

Ответы [ 2 ]

1 голос
/ 11 марта 2020

function filterArrayByImg1(arr) {

  let x = [];

  return arr.filter((e, a) => {

      if (!e.img1 || !e.img1[0] || x.includes(e.img1[0]))
        return false;
      else {
        x.push(e.img1[0]);
        return true;
      }
    })
    .map(e => ({
      img1: e.img1[0],
      img2: e.img2[0]
    }));
}


let inputArray = [{
    img1: ['/path/to/img1'],
    img2: ['/path/to/img2']
  },
  {
    img1: ['/path/to/img1'],
    img2: ['/path/to/img3']
  },
  {
    img1: ['/path/to/img1'],
    img2: ['/path/to/img4']
  },
  {
    img1: ['/path/to/img12'],
    img2: ['/path/to/img5']
  },
  {
    img1: ['/path/to/img12'],
    img2: ['/path/to/img46']
  },
  {
    img1: ['/path/to/img12'],
    img2: ['/path/to/img45']
  },
  {
    img1: ['/path/to/img12'],
    img2: ['/path/to/img478']
  }
];



//filter the array
let filteredArr = filterArrayByImg1(inputArray);

console.log(filteredArr);
1 голос
/ 11 марта 2020

Используйте forEach l oop и создайте любой объект с помощью ключа unqiue. Получить Object.values от построенного объекта.

const data = [
  { img1: ["/path/to/img1"], img2: ["/path/to/img2"] },
  { img1: ["/path/to/img1"], img2: ["/path/to/img3"] },
  { img1: ["/path/to/img1"], img2: ["/path/to/img4"] },
  { img1: ["/path/to/img12"], img2: ["/path/to/img5"] },
  { img1: ["/path/to/img12"], img2: ["/path/to/img46"] },
  { img1: ["/path/to/img12"], img2: ["/path/to/img45"] },
  { img1: ["/path/to/img12"], img2: ["/path/to/img478"] }
];

const update = data => {
  const res = {};

  data.forEach(item => {
    const u_key = item.img1[0];
    if (!(u_key in res)) {
        res[u_key] = item;
    }
  });
  return Object.values(res);
};

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