javascript - 如果未定义,不返回对象?
问题描述
我希望有人可以在这里提供帮助,或者指出我正确的方向。
- 我正在使用外部 API 来找出哪些航班在哪些日子可用。(响应是
mm_newJson
)。 - 然后我创建一个新对象
obj = {};
,来存储/推送我每天需要的值,(date
和fare
)。 - 然后,我将
obj.date
与我的日历日匹配,并fare
在有值时插入该值。
有几天,我的对象中没有值。因此,返回undefined
。
这是我的对象在这种情况下的样子的屏幕截图:
问题:
对象所在的位置undefined
(因为没有 object.date 或 object.fare 键/值),我不希望将 object.fare 插入到我的日历中。
在这种情况下,“未定义”出现在我的日历中。
我已经通过用空字符串替换“未定义”来解决这个问题" "
。但基本上,我根本不希望 object.fare 被返回,如果它是未定义的。
我的代码在下面,我尝试在下面的函数中添加我的条件。例如:
if (typeof object === 'object')
, 或
if (object == 'undefined')
, 或
但是,我不确定如何解决此问题。
如果未定义,我只是不希望插入 object.value。当我不希望它出现在匹配的日历日时,未定义会出现。
window.mm_newJson = [];
window.mm_dailyPrice = [];
window.mm_fullDate = new Date();
window.mm_startDate = String(mm_fullDate.getFullYear()) + '-' + String(mm_fullDate.getMonth()+1) + '-' + String(mm_fullDate.getDate());
// FETCH DATE AVAILABILITY
const response = await fetch('https://www.MYAPI.COM');
mm_newJson = await response.json();
// Loope through API to find each month
for (let i=0; i < mm_newJson.Months.length; i++) {
console.log(mm_newJson.Months[i].FlightDates);
// Find fares which are available in month
for (let j = 0; j < mm_newJson.Months[i].FlightDates.length; j++) {
let obj = {};
// Grab the specific dates
obj['date'] = String(mm_newJson.Months[i].YearNumber) + '-' + String(('0' + String(mm_newJson.Months[i].MonthNumber)).slice(-2)) + '-' + String(('0' + (mm_newJson.Months[i].FlightDates[j])).slice(-2));
obj['fare'] = "WW";
mm_dailyPrice.push(obj);
};
};
// Search mm_dailyPrice for date
function searchDate(input) {
let object = mm_dailyPrice.find(el => el.date === input);
console.log("object", object)
if (object != undefined) {
return object.fare;
} else {
// Returns undefined, if I do not handle else condition
return "n/a";
}
};
// Add AVAILABILITY
let days = document.querySelector('div[data-tab*="Date Calendar Outbound"]').querySelectorAll('.day');
let j = 0;
// For each day in the 12 month calendar, display the "fare" value
for (let i = 0; i < days.length; i++) {
let date = days[i].dataset.date;
if (days[i].firstElementChild){
let fare = searchDate(date);
// if (fare !== "undefined") {
console.log("fare", fare);
let priceSpan = document.createElement('span');
priceSpan.innerHTML = String(fare);
priceSpan.setAttribute('class', 'calendar-price-test');
days[j].appendChild(priceSpan);
j++;
// }
}
};
如果对象未定义,这是我的日历的外观(但在此屏幕截图中,我已将 undefined 替换为字符串,因此undefined
不会出现在相关日期。
但实际上,我根本不希望这些天出现任何东西。所以我不希望 object.fare 被识别,如果它是未定义的。IE - 我不希望它出现在日历中。
如果有帮助,这也是初始获取后响应的屏幕截图。中的数字FlightDates
代表一个月中的几天,我只想在其中注入“WW”。
解决方案
你可以设置一个if块,如果票价不是"n/a"
,你可以设置innerHTML。否则,您不会对 innerHTML 做任何事情。
if (fare !== "n/a") {
priceSpan.innerHTML = String(fare);
}
推荐阅读
- vue.js - 我必须使用哪种生命周期方法在 vue.js 中显示更新的内容?
- c# - bindingsource.filter 如何添加来自不同列的多个过滤器
- python - 坚持 Treeview 到 N+S
- postgresql - 在侦听模式下实时更改数据捕获时的 Postgresql 语法错误
- python - 你如何从数据框行值制作日期时间列表?
- amazon-web-services - AWS Session Manager 连接状态取决于实例状态?
- java - REST API 在 Spring Boot 中删除 HTTP 请求
- google-cloud-spanner - Goolge Cloud Spanner DML 插入时间戳
- statnet - 如何解决ergm退化?
- javascript - 如何让 Discord YouTube Notifier 机器人使用“viewCount”作为发布视频的条件?