检查嵌套的JSON项是否存在

时间:2016-01-04 05:39:34

标签: javascript json

我有以下JSON结果。我必须在网页上显示三个日期类型:onsaleDatefocDateunlimitedDate。这些字段是键“date”的“值”。我目前正在使用dates[0].datedates[1].datedates[2].date访问日期。但问题是,其他一些dates结果并不一定包含onsaleDatefocDateunlimitedDate类型的所有三个项目。在将它们分配给变量以显示在页面上之前,如何检查这三个日期types是否存在?我需要条件循环吗?我可以将hasOwnProperty用于嵌套项吗?

"results": [
   "dates": [
       {
         "type": "onsaleDate",
         "date": "2011-10-12T00:00:00-0400"
       },
       {
         "type": "focDate",
         "date": "2011-09-12T00:00:00-0400"
       },
       {
         "type": "unlimitedDate",
         "date": "2012-12-18T00:00:00-0500"
       },
       {
         "type": "digitalPurchaseDate",
         "date": "2012-05-01T00:00:00-0400"
       }
     ]

2 个答案:

答案 0 :(得分:0)

我会通过修改结果的数据类型来处理问题:

results = JSON.parse(results);
var dates = {};
results.dates.forEach(obj => dates[obj.type] = obj.date);
results.dates = dates;

//now you can access them by
if(results.dates.onsaleDate){
  // display on sale date....
}

答案 1 :(得分:0)

要查找数组中对象中是否存在特定类型,可以使用find

results.dates.find(obj => obj.type === "onsaleDate")

您可以通过编写一个带有特定属性名称的函数并返回适合传递给find的函数来概括这一点:

function hasType(type) { 
  return function(o) { return o.type === type; };
}

现在,您检查是否存在onsaleDate

results.dates.find(hasType("onsaleDate"))

或者用

检查所有三个
results.dates.find(hasType("onsaleDate")) && results.find(hasType("...

或者,如果您愿意

["onsaleDate", "focDate", "unlimitedDate"] . 
  every(type => results.dates.find(hasType(type)))