Как фильтровать массив в ReactJS, сравнивая его с другим массивом

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть два массива в ReactJS следующим образом

 let document = [
  { text: 'Document 1', value: 'abcd' },
  { text: 'Document 2', value: 'efgh' }
]

let filterTypes = [{ value: 'abcd', id: 1 }]
  

Как сгенерировать отфильтрованный массив из этого в ReactJS, содержащий только один объект со значением abcd?

Ответ №1:

Вы могли бы использовать Array.prototype.some() метод внутри Array.prototype.filter() метода. Некоторый метод возвращает логическое значение, если хотя бы один элемент в массиве проходит проверку заданной функцией обратного вызова.

 const doc = [
  { text: 'Document 1', value: 'abcd' },
  { text: 'Document 2', value: 'efgh' },
];

const filterTypes = [{ value: 'abcd', id: 1 }];

const ret = doc.filter((x) => filterTypes.some((y) => y.value === x.value));
console.log(ret);  

Ответ №2:

 const docArray = [
  { text: 'Document 1', value: 'abcd' },
  { text: 'Document 2', value: 'efgh' },
];

const filterTypes = [{ value: 'abcd', id: 1 }];


console.log('-----non-matched----');
const nonmatched = docArray.filter(doc => filterTypes.findIndex(filt=> filt.value === doc.value));
console.log(nonmatched);

console.log('------matched----');
const matched = docArray.filter(doc => filterTypes.findIndex(filt=> filt.value !== doc.value));
console.log(matched);