循环遍历具有空数据的数组列表的问题

时间:2016-02-02 13:11:50

标签: javascript arrays api loops

这是我的第一个问题,希望你能提供帮助。目前我正在尝试遍历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.

谢谢大家!

1 个答案:

答案 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),并且不必全局匹配(无论如何只处理第一个结果)。