Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 反应过滤器有效载荷阵列_Arrays_Reactjs_Payload - Fatal编程技术网

Arrays 反应过滤器有效载荷阵列

Arrays 反应过滤器有效载荷阵列,arrays,reactjs,payload,Arrays,Reactjs,Payload,我需要帮助筛选不同值的数组。我使用React。提前谢谢你 我有一个有效负载,它包含3种不同类型的数组,每种类型的数组都有以下键值 myPayload:阵列(3) 类型为“学生”和“教师”的卡片包含相同的字段,但“建筑”卡片具有不同于其他卡片的字段 我将阵列渲染为卡片,我的目标是能够搜索阵列/卡片的所有值 这是我的卡中的内容。reducer import { FILTER_CARDS, FETCH_CARDS } from '../X/Y'; const initialState = { myP

我需要帮助筛选不同值的数组。我使用React。提前谢谢你

我有一个有效负载,它包含3种不同类型的数组,每种类型的数组都有以下键值

myPayload:阵列(3)

类型为“学生”和“教师”的卡片包含相同的字段,但“建筑”卡片具有不同于其他卡片的字段

我将阵列渲染为卡片,我的目标是能够搜索阵列/卡片的所有值

这是我的
卡中的内容。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;
            }),