首页 > 解决方案 > 如果未定义,不返回对象?

问题描述

我希望有人可以在这里提供帮助,或者指出我正确的方向。

  1. 我正在使用外部 API 来找出哪些航班在哪些日子可用。(响应是mm_newJson)。
  2. 然后我创建一个新对象obj = {};,来存储/推送我每天需要的值,(datefare)。
  3. 然后,我将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”。

在此处输入图像描述

标签: javascriptapiobjectfindundefined

解决方案


你可以设置一个if块,如果票价不是"n/a",你可以设置innerHTML。否则,您不会对 innerHTML 做任何事情。

if (fare !== "n/a") {
   priceSpan.innerHTML = String(fare);
}

推荐阅读