这是我的第一个问题,希望你能提供帮助。目前我正在尝试遍历100个数组的API列表,所有数组都包含一个数据字符串。我的循环过滤数字数据并将其打印到div id。但是当我使用"#N / A"而不是数字,它打破了我的循环。我已经尝试嵌套if语句来检查数据是否为null,但是当它将空数据视为对象时,这不起作用。我已经添加了注释掉的代码来展示我尝试过的东西:
var xhr = new XMLHttpRequest();
var URL = "https://spreadsheets.google.com/feeds/list/0AhySzEddwIC1dEtpWF9hQUhCWURZNEViUmpUeVgwdGc/1/public/basic?alt=json";
xhr.open("GET", URL, false);
xhr.send();
var statusResponseStringify = JSON.stringify(xhr.responseText, "", 2);
var statusResponseParse = JSON.parse(xhr.responseText);
var Find = statusResponseParse.feed.entry;
for (var i = 0; i < Find.length; i++) {
var FTSEContent = statusResponseParse.feed.entry[i].content.$t;
document.getElementById("FTSEName").innerHTML+=FTSEContent + "<br><br>";
var text = FTSEContent;
var value = text.match(/(\d[\d\.]*)/g);
//var price = value[0];
//var change = value[1];
console.log(value);
/*if (typeof value === "number") {
document.getElementById("Change").innerHTML+=value + "<br>";
}
else if (typeof value === null) {
document.getElementById("Change").innerHTML+="N/A" + "<br>";
}
else if (typeof value === "object") {
document.getElementById("Change").innerHTML+="Smell" + "<br>";
}
else {
document.getElementById("Change").innerHTML+="poo" + "<br>";
};*/
if (typeof value == "undefined") {
document.getElementById("Print").innerHTML+="N/A" + "<br>";
}
else {
document.getElementById("Print").innerHTML+=value[0] + "<br>";
};
};
This is the console I get back when I run this code
任何人都可以帮我解决一些代码问题,以便在循环时绕过null响应。理想情况下,只要API数据中存在空值或#N / A,就可以打印数字并打印N / A.
谢谢大家!
答案 0 :(得分:2)
重写您的支票:而不是if (typeof value == "undefined")
它应该是......
if (value === null) { ... }
...由于.match()
在非匹配时返回null
,而不是undefined
。
作为旁注,您的代码可以简化一些。首先,您不必在FTSEContent中重复整个statusResponseParse.feed.entry
...表达式,而是使用Find
:
var FTSEContent = Find[i].content.$t;
其次,我的理解是您检查该内容字符串中的数字。在这种情况下,您可以稍微调整一下模式:
var value = FTSEContent.match(/(\d+(?:\.\d+)?)/);
...所以它不会消耗“3 ..”和“3.14.15”之类的非法数字(在最后一种情况下,只会匹配3.14
),并且不必全局匹配(无论如何只处理第一个结果)。