【发布时间】:2021-07-06 23:56:27
【问题描述】:
我很难用复选框输入制作过滤数组。我的问题是我只能通过其中一个过滤条件进行过滤。
例如,如果我选中了 3 个复选框,例如早餐、游泳池和健身房,我只想要我的所有数组对象中想要过滤的那些真正的复选框。但取而代之的是,它仍在过滤数组中最真实的数组。包括不真实的。当我检查所有功能时,如果我的所有条件都不成立,我希望它说“不匹配”。
我知道我的代码有点乱,但如果你能帮助我,我将不胜感激。
谢谢。
上下文 API:
const [myHotel] = useState(
[
{
id: uuidv4(),
title: "Beach Hotel",
avaibleRoom: 16,
hotel_img: "https://images.unsplash.com/photo-1566073771259-6a8506099945?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80",
hotel_room_img: [
"https://images.unsplash.com/photo-1570214476695-19bd467e6f7a?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80",
"https://images.unsplash.com/photo-1559599189-fe84dea4eb79?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1350&q=80",
"https://images.unsplash.com/photo-1582582484783-0a7a9e45b0d6?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1350&q=80",
],
luks: false,
maxCapacity: 39,
breakfast: true,
freeotopark: true,
pool: true,
wifi: true,
gym: false,
bar: true,
beach: true,
minigolf: false,
price: 1730,
},
{
id: uuidv4(),
title: "Luxurios Hotel",
avaibleRoom: 17,
hotel_img: "https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1350&q=80",
hotel_room_img: [
"https://images.unsplash.com/photo-1559599238-308793637427?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1350&q=80",
"https://images.unsplash.com/photo-1565330502637-963b256876c6?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1349&q=80",
"https://images.unsplash.com/photo-1559599242-651c4e085efb?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=1350&q=80",
],
luks: true,
maxCapacity: 51,
breakfast: true,
freeotopark: false,
pool: true,
wifi: true,
gym: true,
bar: false,
beach: true,
minigolf: false,
price: 2670,
},
这是我的功能:
function Hotels() {
/** CONTEXT API DATA **/
const hotelContext = useContext(HotelsContext);
const {myHotel} = hotelContext;
/** NEW FILTERED HOTEL STATE **/
const [newHotel, setNewHotel] = useState([]);
/** checkboxes true or false data**/
const [handleCheck, setHandleCheck] = useState({});
const handleChange = (e) => {
setHandleCheck({...handleCheck, [e.target.name]: e.target.checked})
}
useEffect(() => {
function filterbyName (value) {
if(handleCheck !== undefined) {
if(handleCheck.breakfast === true) {
return value.breakfast === true
} else if (handleCheck.luks === true) {
return value.luks === true
} else if (handleCheck.freeotopark === true) {
return value.freeotopark === true
} else if (handleCheck.pool === true) {
return value.pool === true
} else if (handleCheck.wifi === true) {
return value.wifi === true
} else if (handleCheck.gym === true) {
return value.gym === true
} else if (handleCheck.bar === true) {
return value.bar === true
} else if (handleCheck.beach === true) {
return value.beach === true
} else if (handleCheck.minigolf === true) {
return value.minigolf === true
} else {
return value
}
} else {
return value
}
}
setNewHotel(
myHotel.filter(filterbyName)
)
}, [handleCheck, myHotel])
【问题讨论】:
标签: arrays reactjs checkbox conditional-statements filtering