我可以在对象上使用indexOf()吗?

时间:2020-01-04 17:04:20

标签: javascript database react-native

当我在React Native应用程序中调用checkInList()时,出现错误:

TypeError:无法读取未定义的属性indexOf

myList[]似乎是一个对象而不是数组,所以我不知道这就是为什么indexOf不起作用的原因吗?我该怎么办?我需要它来快速运行并快速检查。还有其他选择吗?

constructor(props) {
  super(props)
  this.state = {
    myList: []
  }
}
// get string list from DynamoDB and set it locally to myList
assign() {
  this.setState({myList: userData.data.getlist.mylistfromDB}); 
}
// Then check if my string is in the list i just set 
checkInList() {
  if (this.state.myList.indexOf("xyzabc") > -1) {
    // In the list!
  } else {
    // Not in the list
  }    
}

我的清单: See List here

4 个答案:

答案 0 :(得分:0)

Cell-Y是一个数组,indexOf应该与字符串一起使用。您的数据可能在检查之前尚未加载。也许myList返回未定义。检查函数是否按正确的顺序执行,因为我假设您的数据加载调用是异步的,并且您还需要注意生命周期事件。如果您尝试渲染mylistfromDB之后仍在加载的内容,它也可能出错。

答案 1 :(得分:0)

可能userData.data.getlist.mylistfromDB返回undefined

您可以在调用setState函数之前添加支票-

assign() {
  let data = userData.data.getlist.mylistFromDB;
  this.setState({myList: data ? data : []}); 
}

答案 2 :(得分:0)

如果未定义setState数据(即myList),通常会出现此错误。因此,请检查一次,如果它的undefined不能在其中使用indexOf。

您可以执行以下操作:

  assign() {
  let dataToBeadded = userData.data.getlist.mylistFromDB;
  this.setState({myList: dataToBeadded == undefined ? dataToBeadded : []}); 
}

答案 3 :(得分:0)

indexOf()是JavaScript中Array或list的属性,它指示参数中指定的元素的索引。并且Object将值存储在键值对中,因此indexOf不能用于对象上以获取索引。 / p>

var a = {1: "1", 2: "2"}
>> a.indexOf(2)
>> Uncaught reference error

var b = [1,2,3]
b.indexOf(2)
>> 1