【问题标题】:How can I check if object contains a certain key?如何检查对象是否包含某个键?
【发布时间】:2019-02-25 16:49:15
【问题描述】:

这是我的对象data:

[{id:1, name:"Cat", category:{id:2, name:"Animals"}}]

我想检查它是否包含密钥category。

这是我的方法:

if (data.hasOwnProperty("category")) {
console.log("data contains category");
}else {
  console.log("data does not contain category");
}

输出是:

数据不包含类别

应该是相反的……

【问题讨论】:

  • 你有一个数组,而不是一个对象。如果你应该有一个对象,你应该查看data的来源。
  • @Devon。它必须是一个对象,因为如果我 alert(data.toString()); 这是输出:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
  • 对象周围有[ ];它是一个包含一个对象的数组。
  • @Jarla,这可能不是查看数据的最简单方法,请使用您的控制台,而不是警报。除此之外,从外观上看,您有一个包含多个对象的数组,而不是单个对象。我认为问题是当你有一个对象数组时你期望一个对象。是生产者错了,还是消费者的期望错了,由你自己判断。
  • @Devon 谢谢,我总是对这个问题感到困惑......它是一个对象还是一个数组

标签: javascript object key


【解决方案1】:

您需要迭代您的数组。所以你可以把代码放在forEach

let k = [{
  id: 1,
  name: "Cat",
  category: {
    id: 2,
    name: "Animals"
  }
}]

k.forEach(function(data) {
  if (data.hasOwnProperty("category")) {
    console.log("data contains category");
  } else {
    console.log("data does not contain category");
  }
})

如果您不喜欢迭代,则需要传递索引,因为 data 是一个对象数组。

let data = [{
  id: 1,
  name: "Cat",
  category: {
    id: 2,
    name: "Animals"
  }
}]


if (data[0].hasOwnProperty("category")) {
  console.log("data contains category");
} else {
  console.log("data does not contain category");
}

【讨论】:

    【解决方案2】:

    您还可以使用some 来检查数组中是否有任何对象符合特定条件:

    var data = [{
      id: 1,
      name: "Cat",
      category: {
        id: 2,
        name: "Animals"
      }
    }];
    
    var hasCategory = data.some(k => k.hasOwnProperty('category'));
    
    if (hasCategory) {
      console.log("data contains category");
    } else {
      console.log("data does not contain category");
    }

    【讨论】:

      【解决方案3】:

      您需要遍历数组元素。你可以destructure assignment

      let arr = [{id:1, name:"Cat", category:{id:2, name:"Animals"}}]
      
      arr.forEach(({category})=>{
        if (category !== undefined) {
         console.log("data contains category");
        }else {
         console.log("data does not contain category");
        }
      })

      【讨论】:

      • 附带说明,如果 category 定义为 null、0 或任何其他虚假值,您当前的代码将显示:数据不包含类别我>。也许您可以改进它,将检查条件更改为category !== undefined。
      • @CodeManiac 欢迎您。我希望你的反对票得到回复,你被反对票不是我的本意,对此感到抱歉。
      • @Shidersz 没问题,伙计 :) 否决票不要打扰我。唯一的动机是学习。
      【解决方案4】:

      这是一个只有一个索引的数组,因此您可以使用运算符in:

      "category" in data[0] // That checks if the property "category" exists.
      

      如果你有多个索引,你应该循环那个数组。

      运算符in 也会检查继承的属性。

      let data = [{id:1, name:"Cat", category:{id:2, name:"Animals"}}];
      data.forEach((o, i) => console.log("Index:", i, " - Has category?:", "category" in o));

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 2011-03-27
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多