Arrays 反应过滤器有效载荷阵列
我需要帮助筛选不同值的数组。我使用React。提前谢谢你 我有一个有效负载,它包含3种不同类型的数组,每种类型的数组都有以下键值 myPayload:阵列(3) 类型为“学生”和“教师”的卡片包含相同的字段,但“建筑”卡片具有不同于其他卡片的字段 我将阵列渲染为卡片,我的目标是能够搜索阵列/卡片的所有值 这是我的Arrays 反应过滤器有效载荷阵列,arrays,reactjs,payload,Arrays,Reactjs,Payload,我需要帮助筛选不同值的数组。我使用React。提前谢谢你 我有一个有效负载,它包含3种不同类型的数组,每种类型的数组都有以下键值 myPayload:阵列(3) 类型为“学生”和“教师”的卡片包含相同的字段,但“建筑”卡片具有不同于其他卡片的字段 我将阵列渲染为卡片,我的目标是能够搜索阵列/卡片的所有值 这是我的卡中的内容。reducer import { FILTER_CARDS, FETCH_CARDS } from '../X/Y'; const initialState = { myP
卡中的内容。reducer
import { FILTER_CARDS, FETCH_CARDS } from '../X/Y';
const initialState = { myPayload: [], filteredPayload: [] };
export default function (state = initialState, action) {
const { type, myPayload = [], value } = action;
const handler = {
[FETCH_CARDS]: {
...state,
myPayload,
},
[FILTER_CARDS]: {
...state,
filteredPayload: state.myPayload.filter(({ name }) => name.toLowerCase().match(value)),
},
};
return handler[type] || state;
}
以上内容仅通过每张卡的“名称”字段过滤
我试图通过修改“过滤卡”来过滤所有值(姓名、年龄、身高、类型、学名、国家、州),但这会中断,并给我一个错误
“无法读取未定义的属性'toLowerCase'”
关于如何筛选此场景中的所有值的任何输入?您可以只搜索对象的值,因此不需要真正关心键名称
filteredPayload:state.myPayload.filter(item=>(
Object.values(item).some(objValue=>(
objValue.toLowerCase().match(值)
))
))
您可以只搜索对象的值,因此实际上不需要关心键名
filteredPayload:state.myPayload.filter(item=>(
Object.values(item).some(objValue=>(
objValue.toLowerCase().match(值)
))
))
我通过以下操作解决了这个问题
filteredPayload: state. myPayload.filter(item => {
switch (item.type) {
case 'building':
return (
item.name.toLowerCase().match(value)
|| item.country.toLowerCase().match(value)
|| item.state.toLowerCase().match(value)
);
case 'student':
case 'teacher':
return (
item.name.toLowerCase().match(value)
|| item.age.toLowerCase().match(value)
|| item.height.toLowerCase().match(value)
);
}
return item;
}),
谢谢大家的帮助^ ^ ^我通过以下方法解决了这个问题
filteredPayload: state. myPayload.filter(item => {
switch (item.type) {
case 'building':
return (
item.name.toLowerCase().match(value)
|| item.country.toLowerCase().match(value)
|| item.state.toLowerCase().match(value)
);
case 'student':
case 'teacher':
return (
item.name.toLowerCase().match(value)
|| item.age.toLowerCase().match(value)
|| item.height.toLowerCase().match(value)
);
}
return item;
}),
感谢大家对我的帮助,似乎state.myPayload没有设置。state.myPayload没有任何值。提示(state=initialState)我认为您可以对动态属性进行计算属性访问,比如:
state.myPayload.filter((item)=>item[type]===值
或其他什么similar@Sodhisaab在控制台中,加载myPayload并正确获取值,这只是过滤让我困惑的值。对我来说,似乎没有设置state.myPayload。state.myPayload没有任何值。提示(state=initialState)我认为您可以对动态属性进行计算属性访问,比如:state.myPayload.filter((item)=>item[type]===值
或其他什么similar@Sodhisaab在控制台中,加载myPayload并正确获取值,只是过滤了让我困惑的值。我得到一个错误“无法将未定义或null转换为对象”@CatGirl19实际上,我忘记在对象中添加项。值。更新的答案。我得到一个错误r'无法将未定义或null转换为对象'@CatGirl19确实,我忘记在对象中添加项。值
。更新答案。
filteredPayload: state. myPayload.filter(item => {
switch (item.type) {
case 'building':
return (
item.name.toLowerCase().match(value)
|| item.country.toLowerCase().match(value)
|| item.state.toLowerCase().match(value)
);
case 'student':
case 'teacher':
return (
item.name.toLowerCase().match(value)
|| item.age.toLowerCase().match(value)
|| item.height.toLowerCase().match(value)
);
}
return item;
}),