Сравните 2 неизменных списка на равенство - PullRequest
0 голосов
/ 30 июня 2018

Я собираюсь сделать что-то, что, как я думал, уже много раз делалось с Immutable.js Списками, но я не могу найти этот случай. У меня есть 2 списка. Один с предметами. И тот, который содержит ключи элементов, выбранных в качестве данных. пользователи, которые выбрали вещи из предметов в основном. Я храню ключ от элементов как данные в профиле пользователя, который выбрал элемент (в базе данных Firebase, не то, чтобы это имело значение). Поэтому я хочу просто отфильтровать элементы в моем приложении с помощью селектора. В селекторе я ищу, чтобы сравнить ключ из элементов с ключом, который я сохранил в профиле пользователя. Если это совпадение, дайте мне соответствующие данные из элементов в качестве состояния для использования. Я считаю, что это должен быть какой-то фильтр на Предметы какой-то Чтобы сделать сравнение, мне также нужно получить сохраненные данные ключа в профиле пользователя для сравнения, который также является неизменным списком.

Я пытаюсь

   const selectedItems = items.filter(
    item => {
      userItems.forEach(userItem => {
       if (userItem.itemKey === item.key) {
          return item  <-------pretty sure this is where  Im doing it wrong
       }
     })
   });

Если я жестко закодирую запись из своего профиля пользователя и фильтра, я получаю то, что ожидаю, - это новый отфильтрованный список с одним элементом, совпадающим с идентификатором ниже.

  const selectedItems = items.filter(
    item => {
     return item.get('key') === '-LDR5cNZPjthN6nK9tzJ'
    });

1 Ответ

0 голосов
/ 30 июня 2018

filter создаст новый массив с каждым элементом в исходном массиве, который вернул истинное значение. Имея это в виду, вы можете использовать комбинацию filter и some , чтобы отфильтровать все объекты, для которых у вас есть ключ в userItems:

const selectedItems = items.filter(item =>
  userItems.some(userItem => userItem.itemKey === item.itemKey)
);
...