それ自体が配列を持っているオブジェクトの配列を、配列ごとのフィルターでフィルター処理するにはどうすればよいですか?配列ごとのフィルター内のすべてのアイテムは、オブジェクト配列内にありますか?
例を挙げて説明する方が簡単かもしれません。
const data = [
{user: 'bob', favoriteThings: ['cats', 'dogs', 'movies']},
{user: 'sally', favoriteThings: ['cats', 'movies', 'trees']},
]
const filterByFavs = ['cats', 'trees']
// result should only include [{user: 'sally', favoriteThings: ['cats', 'movies', 'trees']}]
// if filterByFavs is ['cats'], then both users are returned.
// favoriteThings has to have all the items from filterByFavs in order for the filter to apply.
上記切り取らでは、私はフィルタリングしようとしていますdata
ので、結果は唯一のすべての項目では、オブジェクト含まれていることfilterByFavs
にありますがfavoriteThings
。
私は両方reduce
でこれを解決しようとしfilter
ましたが、望ましい結果が得られないようです。
let out = data.filter((fav) => {
return (
fav.favoriteThings.filter((tag) => {
return !filterByFavs.includes(tag);
})
);
});
let a = data.reduce((acc, fav) => {
let favs = fav.favoriteThings;
let allExists = favs.filter((tag) => !filterByFavs.includes(tag.text));
if (allExists) {
acc.push(fav);
return acc;
}
return acc;
}, []);
私のロジックで直面している問題は、filterByFavs
アイテムが1つしかない場合は正常にフィルタリングできますが、複数ある場合はフィルタリングできないことです。
検索.every
するアイテムの1つが、繰り返される他の配列に含まれていることを確認します。
const data = [
{user: 'bob', favoriteThings: ['cats', 'dogs', 'movies']},
{user: 'sally', favoriteThings: ['cats', 'movies', 'trees']},
];
const filterByFavs = ['cats', 'trees'];
const result = data.filter(
obj => filterByFavs.every(str => obj.favoriteThings.includes(str))
);
console.log(result);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加