JS在字符串中找到IndexOf()一个子字符串

时间:2016-09-22 21:39:05

标签: javascript reactjs

我正在使用React构建一个餐馆违规应用程序,我正在尝试返回结果,其中搜索的术语是数据集的子字符串。但是,我收到一条错误消息说

  

ViolationsRequest.jsx:49未捕获的TypeError:无法读取null的属性'indexOf'。

根据我的测试,看起来像door.restaurant被控制台记录为未定义。奇怪的是,这段代码完全匹配,即,如果你将if块切换为:

if (this.props.restaurant == door.restaurant) {

这是我的代码块。

const violationElements = this.state.doors.map((door, idx) => {
      if (door.restaurant.indexOf(this.props.restaurant) !== -1) {
        console.log();
        return (
          <ViolationsView key={idx}
                      restaurant={door.restaurant}
                      building={door.building}
                      street={door.street}
                      zip={door.zip}
                      phone={door.phone}
                      cuisine={door.cuisine}
                      inspectionDate={door.inspectionDate}
                      action={door.action}
                      violationCode={door.violationCode}
                      violationDescription={door.violationDescription}
                      criticalFlag={door.criticalFlag}
                      score={door.score}
                      grade={door.grade}
                      gradeDate={door.gradeDate}
                      inspectionType={door.inspectionType}
          />
        )
      }
    });

这是我的state.doors数组:

  const cleanData = restaurantData.data.map((inspectionData) => {
    const [sid, id, position, createdAt, createdMeta,
      updatedAt, updatedMeta, meta, camis, dba, boro,
      building, street, zipcode, phone, cuisine,
      inspectionDate, action, violationCode,
      violationDescription, criticalFlag, score, grade,
      gradeDate, recordDate, inspectionType] = inspectionData;
    return {
      sid: sid,
      restaurant: dba,
      building: building,
      street: street,
      zip: zipcode,
      phone: phone,
      cuisine: cuisine,
      inspectionDate: inspectionDate,
      action: action,
      violationCode: violationCode,
      violationDescription: violationDescription,
      criticalFlag: criticalFlag,
      score: score,
      grade: grade,
      gradeDate: gradeDate,
      inspectionType: inspectionType,
    };
  });

2 个答案:

答案 0 :(得分:0)

我认为问题是你没有使用===运算符,所以使用==你只验证值而不是类型。 例如:

var foo = null;
var bar = '';
var baz = 0;
var off = {};

console.log(bar == baz); // true
console.log(bar === baz); // false
console.log(foo == off.bar); // true
console.log(foo === off.bar); // false

所以可能this.props.restaurant == door.restaurant是真的 但是this.props.restaurant === door.restaurant是假的

答案 1 :(得分:0)

你的一个door.restaurant是null,这是错误信息所说的。空的,不是未定义的。如果它未定义,则错误消息会这样说。当您在此值上调用doors.restaurant.indexOf时,它会返回错误。

当我输入此内容时,您似乎已经弄明白了。