Фильтровать объекты в массиве в массиве - PullRequest
0 голосов
/ 06 мая 2018

У меня есть массив объектов в массивах из выбранных тегов

const posts = 
[{note: 'something..', title: 'something..',
tags: [{title: 'First tag', key: '123'}, {title: 'Second tag', key: 'ABC'}]}, 
{note: 'another post..', title: 'another post..', 
tags: [{title: 'third tag', key: '098'}, {title: 'forth tag', key: 'ZYX'}, {title: 'fifth tag', key: '1A9'}]}]

А у меня есть массив с ключами

const keys = ['123', 'ABC', '098', 'ZYX', '1A9']

Я хочу вернуть отфильтрованные сообщения. Поэтому я попытался .map и .filter над этими сообщениями, чтобы попытаться сопоставить их с ключами, но у меня это не работает.

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

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете фильтровать, проверяя теги с ключами.

var posts = [{ note: 'something..', title: 'something..', tags: [{ title: 'First tag', key: '123' }, { title: 'Second tag', key: 'ABC' }] }, { note: 'another post..', title: 'another post..', tags: [{ title: 'third tag', key: '098' }, { title: 'forth tag', key: 'ZYX' }, { title: 'fifth tag', key: '1A9' }] }],
    keys = ['123'], //, 'ABC', '098', 'ZYX', '1A9'],
    result = posts.filter(({ tags }) => tags.some(({ key }) => keys.includes(key)));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 06 мая 2018

как то так

const posts = [{note: 'something..', title: 'something..', tags: [{title: 'First tag', key: '123'}, {title: 'Second tag', key: 'ABC'}]}, {note: 'another post..', title: 'another post..', tags: [{title: 'third tag', key: '098'}, {title: 'forth tag', key: 'ZYX'}, {title: 'fifth tag', key: '1A9'}]}]


const keys = ['123', 'ABC', '098', 'ZYX', '1A9']

const filtered = posts.filter(post =>
   post.tags.some( tag => 
      keys.includes( tag.key )
     )
   )
...