【问题标题】:JavaScript error: Cannot read property 'includes' of undefinedJavaScript 错误:无法读取未定义的属性“包含”
【发布时间】:2017-05-21 13:31:42
【问题描述】:

我想检查data.objectId 是否已经存在于数组msgArr 中。为此,我正在运行以下代码:

var exists = msgArr.objectId.includes(data.objectId);

if(exists === false){
   msgArr.push({"objectId":data.objectId,"latLont":data.latLont,"isOnline":data.isOnline});
}

数组如下所示:

var msgArr = [
  {isOnline:true,latLont:"123",objectId:"on0V04v0Y9"},
  {isOnline:true,latLont:"1",objectId:"FpWBmpo0RY"},
  {isOnline:true,latLont:"48343",objectId:"Qt6CRXQuqE"} 
 ]

我收到以下错误:

无法读取未定义的属性“包含”

【问题讨论】:

  • msgArr 是一个数组。它没有objectId
  • @DaveNewton 它有..
  • @Folky.H:那你就没有问题了。
  • 因为msgArr 是一个数组。它没有objectId
  • 如果您想知道如何搜索数组以查看是否包含具有特定 ID 的对象,请在 Google 上搜索,您会找到很多解决方案。

标签: javascript typescript ecmascript-6


【解决方案1】:

正如 cmets 所说:javascript 数组对象没有属性 objectId
查看此数组中的对象很明显它们拥有它,因此要检查某个元素是否存在,您可以使用Array.prototype.some 方法:

var exists = msgArr.some(o => o.objectId === data.objectId);

【讨论】:

    【解决方案2】:

    它告诉您您正在尝试访问未定义对象的属性。 msgArr 对象根本没有属性objectID,这意味着它是未定义。由于它不存在,因此它无法拥有任何类型的 includes 属性。

    您需要的是访问数组中的对象,而不是数组本身。像msgArr[0].objectID 这样的东西会引用一个实例化的对象。您甚至可以使用数组函数通过过滤函数根据其 objectID 检查是否存在。

    【讨论】:

      【解决方案3】:

      首先戴夫牛顿是对的。数组没有 objectId!

      也许您的“数组”不是真正的数组。也许它是一个包含数组的对象...我不知道...但在这种情况下,您必须编写如下代码:

      var exist = msArr["objectId"] !== undefined
      

      如果“msArr”具有名为“objectId”的属性/字段,则布尔值“exist”包含信息

      【讨论】:

      • 哎呀,我错了 :) 该数组包含一个具有该值的对象...顺便说一句,这是一个很好的答案...
      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 2019-07-26
      • 2021-12-21
      • 2021-02-22
      • 2020-05-12
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多