Javascript 获取对象数组中的null错误

Javascript 获取对象数组中的null错误,javascript,reactjs,Javascript,Reactjs,我遇到了一个奇怪的错误:在我的react应用程序中无法读取null的属性“includes”。但是,我100%确定数组中的对象包含FirstName字段 这些值来自props,是一个对象数组,如下所示: [{Id:1,FirstName:A},{Id:2,FirstName:X}]//这就是道具的来源 我缺少什么?下面的代码片段对我很有用,只需编辑您的代码以避免从道具中读取: let values = [{ Id: 1, FirstName: 'A' }, { Id: 2, FirstN

我遇到了一个奇怪的错误:在我的react应用程序中无法读取null的属性“includes”。但是,我100%确定数组中的对象包含FirstName字段

这些值来自props,是一个对象数组,如下所示:

[{Id:1,FirstName:A},{Id:2,FirstName:X}]//这就是道具的来源


我缺少什么?

下面的代码片段对我很有用,只需编辑您的代码以避免从道具中读取:

    let values = [{ Id: 1, FirstName: 'A' }, { Id: 2, FirstName: 'X' }];

    let myVar = values.filter((val) => val.FirstName === 'X'); // works
    let myVar = values.filter((val) => val.FirstName.includes('X')); // Cannot read property 'includes' of null

    console.log('myVar', myVar); // works (prints out the object as the first element of the array
    console.log('myVar firstName', myVar[0].FirstName);
这意味着问题的根源来自于你的道具——如果数据是静态设置的,就像你的例子一样,使用let值=[{Id:1,FirstName:'A'},{Id:2,FirstName:'X'}];这两种方法都能正常工作

我可以想出几个原因来解释为什么会发生这种情况。您的道具是否来自对API的另一个端点的http请求?如果数据不是静态的,并且是从API获取的,则需要在尝试访问其属性之前进行检查,以确保值已准备就绪

例如,如果您的道具应该已取回数组,但在get请求完成之前,您正在尝试使用includes访问仍为空的信息

如果您实际上正在检索数据并将其作为道具传递,请尝试:

if(values) {
   values.filter((val) => val.FirstName.includes('X'));
}
在对数据执行任何操作之前,请确保数据不为null或未定义

如果这不能解决您的问题,请尝试在每次迭代中检查val对象,确保每个对象都存在并具有FistName,然后再尝试访问.includes

你可以试试:

// check that values array is ready from api get request
if(values) {
   values.filter((val) => {
      // check if val has a first name - if error there is your reason
      if(val.FirstName) {
         return val.FirstName.includes('X');
      }

   });
}


1在筛选之前,必须尝试在控制台中记录对象。2您缺少。您的示例似乎不完整,您正在将值定义为局部变量let values,但正在通过this.props.values访问某些内容。确保您提供了一个最小的可复制示例。您还声明了两次myVar。应该扔一个error@EyasSH抱歉,我只是想给出一个来自道具的示例数据。@MaheerAli忽略。是的,我从API中获取这些值,但仍然不起作用!JS引擎进入了这个if块,但是仍然可以看到nullOk,我们现在已经走了一半。在它进入if块之后,在您过滤它之前,控制台会记录值数组。让我们调试一下这个东西。如果它是空的,那么它怎么会进入If块呢。如果不为null,还可以尝试在筛选器中记录每个val。日志和返回都需要一个多行返回而不是单行箭头函数,因此:`values.filterval=>{console.logval;return val.FirstName.includes'X';};`在访问FirstName.includes之前,请确保它们不为null。是否为此变量设置了默认值?因为如果[]返回trueDon,'Don't sure@TamDc我写了一个长条件值!==空值和值!==未定义的和值!==&&值!==[]您能否在筛选之前向我们显示console.logvalues?
// check that values array is ready from api get request
if(values) {
   values.filter((val) => {
      // check if val has a first name - if error there is your reason
      if(val.FirstName) {
         return val.FirstName.includes('X');
      }

   });
}