Javascript测试使用数组使用值而不是索引的数组中对象中是否存在对象键

时间:2018-08-21 18:56:35

标签: javascript arrays json

我已经阅读了许多很棒的代码示例,这些示例测试了带有数组的对象中对象键的存在。这些很棒...

我的问题是返回的JSON具有必须用于获取数组内项目的键值。这是一个例子。查看“订单”:

{"Routes": [
     {
        "route": {
            "id": "1daf1f53-80b6-49d6-847a-0ee8b814e784-20180821"
        },
        "vehicle": {
            "id": "1daf1f53-80b6-49d6-847a-0ee8b814e784"
        },
        "driver": {
            "id": "6c2823be-374e-49e5-9d99-2c3f586fc093"
        },
        "orders": {
            "6df85e5f-c8bc-4290-a544-03d7895526b9": {
                "id": "6df85e5f-c8bc-4290-a544-03d7895526b9",
                "delivery": {
                    "customFields": {
                        "custom": "5379"
                    }
                },
                "isService": true
            }
         }    
   }
    ]
};

我正在使用的代码可以工作到必须指定键值的程度:

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;
}

以下是一些可行且失败的示例:

console.log(checkProperty(test, 'Routes.0.orders'));  //Works returns true
console.log(checkProperty(test, 'Routes.0.orders.id'));  //Fails returns false
console.log(checkProperty(test, 'Routes.0.orders.6df85e5f-c8bc-4290-a544-03d7895526b9.id)); //Fails returns false

我竭尽全力,感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

 "orders": {
            "6df85e5f-c8bc-4290-a544-03d7895526b9": {
                "id": "6df85e5f-c8bc-4290-a544-03d7895526b9"

第二次测试:
    在您的示例中,Id不是“订单”的直接子代:     orders.6df85e5f-c8bc-4290-a544-03d7895526b9.id

第三项测试:
     第三句语法错误-缺少“。”