Javascript测试在具有数组的对象中是否存在对象键

时间:2017-11-02 10:12:40

标签: javascript json object properties

我需要检查复杂对象(带有数组的嵌套对象)中的属性是否存在。 我发现了几个关于这个主题的帖子,访问量最大的是下面的一个。 提供的解决方案(checkNested函数)的问题不适用于具有数组的对象。 有没有人有解决这个案例的解决方案?

干杯。

javascript test for existence of nested object key

这是我测试的功能:

function checkProperty(obj, prop) {
  var parts = prop.split('.');
  for (var i = 0, l = parts.length; i < l; i++) {
    var part = parts[i];
    if (obj !== null && typeof obj === "object" && part in obj) {
      obj = obj[part];
    } else {
      return false;
    }
  }
  return true;
}

这是我的对象的一个​​例子:

{
  "_msgid": "3ae30deb.af9962",
  "topic": "",
  "payload": "I am really upset terrible service",
  "error": null,
  "parts": {
    "id": "3ae30deb.af9962",
    "type": "array",
    "count": 2,
    "len": 1,
    "index": 0
  },
  "case_id": "0001",
  "features": {
    "usage": {
      "text_units": 1,
      "text_characters": 34,
      "features": 7
    },
    "sentiment": {
      "document": {
        "score": -0.912124,
        "label": "negative"
      }
    },
    "semantic_roles": [{
      "subject": {
        "text": "I"
      },
      "sentence": "I am really upset terrible service",
      "object": {
        "text": "really upset terrible service",
        "keywords": [{
          "text": "terrible service"
        }]
      },
      "action": {
        "verb": {
          "text": "be",
          "tense": "present"
        },
        "text": "am",
        "normalized": "be"
      }
    }],
    "language": "en",
    "keywords": [{
      "text": "terrible service",
      "sentiment": {
        "score": -0.912124
      },
      "relevance": 0.902721,
      "emotion": {
        "sadness": 0.462285,
        "joy": 0.002207,
        "fear": 0.125395,
        "disgust": 0.17766,
        "anger": 0.575927
      }
    }],
    "entities": [],
    "emotion": {
      "document": {
        "emotion": {
          "sadness": 0.462285,
          "joy": 0.002207,
          "fear": 0.125395,
          "disgust": 0.17766,
          "anger": 0.575927
        }
      }
    },
    "concepts": [],
    "categories": [{
      "score": 0.99946,
      "label": "/health and fitness/disease/headaches and migraines"
    }, {
      "score": 0.0155692,
      "label": "/education/school"
    }, {
      "score": 0.0141217,
      "label": "/family and parenting/children"
    }]
  }
}

失败测试:

console.log(checkProperty(msg, 'features.keywords[0].text') ? msg.features.keywords[0].text : "NA");

1 个答案:

答案 0 :(得分:1)

您使用的checkProperty功能无法识别括号([]),它只能识别点。所以,只需给它点:

checkProperty(msg, 'features.keywords.0.text');