我有以下JSON结果。我必须在网页上显示三个日期类型:onsaleDate
,focDate
,unlimitedDate
。这些字段是键“date”的“值”。我目前正在使用dates[0].date
,dates[1].date
和dates[2].date
访问日期。但问题是,其他一些dates
结果并不一定包含onsaleDate
,focDate
,unlimitedDate
类型的所有三个项目。在将它们分配给变量以显示在页面上之前,如何检查这三个日期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"
}
]
答案 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)))