大佬教程收集整理的这篇文章主要介绍了如何根据 3 种不同条件进行过滤 (ReactJS),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三个选择器:
year,这应该检查'release_year'的键值
输入字段,应该检查'title'和'artist'的键值
为空时的默认值
请记住,当用户仅输入输入字段或仅选择流派时,它也应该起作用
为了构建一个函数,我需要过滤并检查对象键值中是否存在该函数。
Click on the link to codesandbox to get a better understanding of this issue
0: {ID: 501437,artist: "Bob",title: "All In",release_year: 2014,genre_ID: 14,…}
1: {ID: 501649,artist: "Elina",title: "Veni paca to",genre_ID: 8,…}
2: {ID: 501895,artist: "Timbo",title: "I Should Have KNown It",release_year: 2010,…}
3: {ID: 502139,artist: "Wakanda",title: "grove St. Party",release_year: 2011,genre_ID: 6,…}
4: {ID: 502992,artist: "Beyoncé",title: "Single LadIEs (Put a Ring on It)",release_year: 2008,genre_ID: 62,
所以我想知道如何编写一个简洁的代码来过滤所有内容。因此,如果我写类似“bob”的内容,但选择“2013”年,它将不会显示任何内容,如果我将“年份”更改为“2014”。然后'Bob' 'All In' 将显示在结果中。
试试下面的过滤器。
inputValue.trim() == '' ||
,因此如果未提供输入,则不会根据输入进行过滤。SELEctedGenres.length == 0 ||
,因此如果没有选择 Genres
进行过滤,则不会使用 Genres
进行过滤。SELEctedYear
设置相同的条件,因为我无法假设它的默认值是什么,所以我没有添加这样的条件。.ToLowerCase
,因此它将以不区分大小写的方式显示结果。
let videoList = [
{id: 501437,artist: "Bob",title: "All In",release_year: 2014,genre_id: 14},{id: 501649,artist: "Elina",title: "Veni paca to",genre_id: 8},{id: 501895,artist: "Timbo",title: "I Should Have Known It",release_year: 2010,{id: 502139,artist: "Wakanda",title: "Grove St. Party",release_year: 2011,genre_id: 6},{id: 502992,artist: "Beyoncé",title: "Single Ladies (Put a Ring on It)",release_year: 2008,genre_id: 62}]
const SELEctedYear = [];
const inputValue = 'bob';
const SELEctedGenres = [14,6,8];
const filterrequirements = (data) => {
return (SELEctedYear == null || SELEctedYear == 0 || (Array.isArray(SELEctedYear) && SELEctedYear.length == 0) || data.release_year == SELEctedYear)
&& (inputValue.trim() == '' || data.artist.toLowerCase().includes(inputValue.toLowerCase()) || data.title.toLowerCase().includes(inputValue.toLowerCase()))
&& (SELEctedGenres.length == 0 || SELEctedGenres.includes(data.genre_id));
}
const filteredVideos = videoList.filter(filterrequirements);
console.log(filteredVideos);
,
const videos = [
{id: 501437,genre_id: 14 },genre_id: 8 },genre_id: 6 },genre_id: 62 },];
const SELEctedYear = 2011;
const inputValue = 'grove';
const SELEctedGenres = new Set([14,8]);
const filteredVideos = videos
.filter((video) => video.release_year === SELEctedYear)
.filter((video) => video.title.toLowerCase().indexOf(inputValue.toLowerCase()) >= 0)
.filter((video) => SELEctedGenres.has(video.genre_id));
console.log(filteredVideos);
,
我会为每个过滤器操作设置单独的函数。在我看来,这将使实际的过滤更容易阅读和理解。
像这样:
const myArr = [
{id: 501437,];
const byYear = (year = 0,item) => (item.release_year === year);
const byArtist = (artist = '',item) => (item.artist === artist)
const byGenres = (genres = [],item) => (genres.includes(item.genre_id))
const filteredArr = myArr
.filter(byYear.bind(this,2014))
.filter(byArtist.bind(this,'Bob'))
.filter(byGenres.bind(this,[14,8]));
console.log(filteredArr);
,
我真的不认为有“单衬”解决方案。一种可能:
const SELEctedYear = 2014;
const inputValue = "bob";
const SELEctedGenres = [14,8];
const checkYear = (data,year) => {
return year ? data.release_year === year : true;
};
const checkValue = (data,value) => {
return value
? data.artist.includes(value) || data.title.includes(value)
: true;
};
const checkGenre = (data,genres) => {
return genres ? genres.includes(data.genre_id) : true;
};
const filterrequirements = (data) =>
checkYear(data,SELEctedYear) &&
checkValue(data,inputvalue) &&
checkGenre(data,SELEctedGenres);
const filteredVideos = videoList.filter(filterrequirements);
取决于你想抽象到分离函数的程度。
编辑:具有多个 .filter()
的其他解决方案可能更好!
以上是大佬教程为你收集整理的如何根据 3 种不同条件进行过滤 (ReactJS)全部内容,希望文章能够帮你解决如何根据 3 种不同条件进行过滤 (ReactJS)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。