javascript - 过滤器不适用于 React 中具有 null 值的对象

标签 javascript reactjs

我已经尝试并测试了许多概念和代码片段,但没有一个有效。我想过滤我的数据(例如,如果我输入“a”,它应该返回包含“a”的数据,如果在搜索框中没有输入任何值,那么它应该返回所有数据)它的工作正常,对象中没有任何空值,但是对于获取一些可为 null 值的第二个 api,其抛出错误。

代码工作正常:

 return Object.keys(item).some(key =>
        item[key].includes(filterItem));

我尝试通过删除空值并仅给出字符串数据键来修复,但无法正常工作。 任何帮助将不胜感激。

我尝试实现的修复:

Object.keys(item).forEach(k => {
           if (item[k] !== null) {
            console.log(item[k])
             return Object.keys(item).some(key =>
              item[key].includes(filterItem)
            );
          }
   })

错误:

enter image description here

编辑:

/* Input Data

const input=[{DeviceType: "CONSUMER", DeviceSubType: "CARD", status: "ACTIVE", categoryname: null, count: 5}
 {DeviceType: "CONSUMER", DeviceSubType: "CARD", status: "AVAILABLE", categoryname: null, count: 2}
2: {DeviceType: "MERCHANT", DeviceSubType: null, status: "ACTIVE", categoryname: "Agent", count: 2}
 {DeviceType: "MERCHANT", DeviceSubType: null, status: "ACTIVE", categoryname: "MerchantOffline", count: 2}
 {DeviceType: "MERCHANT", DeviceSubType: null, status: "ACTIVE", categoryname: "MerchantOnline", count: 1}
 {DeviceType: "MERCHANT", DeviceSubType: null, status: "AVAILABLE", categoryname: null, count: 3}
 {DeviceType: "MERCHANT", DeviceSubType: "XipPOSApp", status: "AVAILABLE", categoryname: null, count: 3}] */
 
 import React, { Component } from 'react'
import "../css/Search.css"
import ReportList from './reportList'


export default class Search extends Component {
  constructor(props) {
    super(props)
    this.state = {
      showData: this.props.list,
      filterItem: "",
      filterCount: "initial"
    }
  }


  handleChange = (e) => {
    this.setState({
      filterItem: e.target.value.toUpperCase(),
      filterCount: "called"
    })

  }



  render() {
    //filtering the data
    const { filterItem, showData } = this.state;

    // console.log(showData)
    const filteredData = showData.filter(item => {

      if (item != null && typeof item != "number") {

        // console.log("item")
        // console.log(item)
        // Object.keys(item).forEach(k => {
        //   if (item[k] !== null && filterItem!==null) {
        //     console.log(item[k])
        //     return Object.keys(item).some(key =>{
        //       console.log(item[key])
        //       item[key].includes(filterItem)
        //     }
           
        //     );
        //   }
        // })

        //working
        return Object.keys(item).some(key =>
         
          item[key].includes(filterItem)
       
          
         
        );
      }
    });
    console.log("filteredData")
    console.log(filteredData)


    const checkValidation = () => {
      if (this.state.filterCount === "initial") {
        return <ReportList data={filteredData} />
      }
      else if (this.state.filterCount === "called") {
        return filteredData != "" ? <ReportList data={filteredData} /> : "NO DATA FOUND"

      }
    }



    return (
      <div>
        <input type="text" placeholder="Search.." onChange={this.handleChange} className="search" />
        <div >{checkValidation()} </div>



      </div>
    )
  }
}
附加带有输入数据的代码片段 输出:在搜索框中输入“ca”时必须提供卡片数据

最佳答案

您需要验证您的item[key]

return Object.keys(item).some(key =>
    (typeof item[key] === 'string' && item[key].includes(filterItem)) 
    || (typeof item[key] === 'number') && item[key] === Number(filterItem))

关于javascript - 过滤器不适用于 React 中具有 null 值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58850578/

相关文章:

reactjs - 使用 mapStateToProps 连接时“无法读取未定义的属性 'map'”

javascript - 在测试中从模态中选择“确定”按钮

javascript - 未捕获的类型错误 : Cannot read properties of undefined (reading 'url' )

javascript - 如何通过按钮随机选择一个div?

javascript - 转换为 Jquery

javascript - 打开时向上滑动的下拉子菜单

javascript - 结合 DOM0 和 DOM2 事件处理程序 - 在 DOM0 处理程序中可能取消事件?

javascript - 如何在 Phoenix (Elixir) 渲染中注入(inject) HTML/使用变量操作 DOM,例如动态插入 SVG 或 PNG?

javascript - 在 React 中管理大型状态树

javascript - 在 React Js 中过滤 Todo 列表