在JS数组中测试NaN
Testing for NaN in a JS array?
昨天我发布了一个关于获取高点的问题。JS来处理XML数据被推送到它时的问题。我没有深入研究,所以我认为我得到的答案有点离谱,所以我今天要试着重新发布它,看看我是否能得到更适合我的问题的答案
我有一个Quickbase应用程序,它正在使用API调用中的XML数据绘制为highchart.js图。XML数据是一个表查询,从14个字段中带回记录数据。在这些字段中,数据的范围可以从.001到99.99,但其中一些字段会不时为空,从而生成{NaN,NaN,NaN}的数组。当该序列被推入图中时,它会使整个图为空,直到您取消选择选项
昨天有人建议Highcharts有一个内置的"nodata"功能,然而,我能找到解释的唯一方法是,当有一个例子表明绝对没有数据提供给图时(在这种情况下,它在图上显示为"没有数据",但这不是我想要的,因为总是会有至少一个(通常至少五个,但为了简单起见,我会说一个)字段有数据。
这是我目前使用的代码
<!DOCTYPE html>
<html>
<head>
<title>Graph</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/no-data-to-display.js"></script>
<script>
$(document).ready(function() {
var sgaxml = 'https://sga.quickbase.com/db/bjmdensiu?apptoken=beadyrucxguavbx5isubd6iaqpe&act=API_DoQuery&query=%7B14.EX.%27_FID_9%7D&clist=7.24.25.26.27.28.29.30.31.32.33.34.35.36.37'
var options = {
chart: {
renderTo: 'container',
type: 'column'
},
title: {
text: 'Components Over Time'
},
xAxis: {
categories: []
},
yAxis: {
title: {
text: 'Concentration%'
}
},
series: []
};
// Load the data from the XML file
$.get(sgaxml, function(xml) {
// Split the lines
var xml = $(xml).find('record');
// Variables for the component series
var seriesH = {
name: 'Hydrogen',
data: []
};
var seriesHe = {
name: 'Helium',
data: []
};
var seriesO = {
name: 'Oxygen',
data: []
};
var seriesHs = {
name: 'Hydrogen Sulfide',
data: []
};
var seriesN = {
name: 'Nitrogen',
data: []
};
var seriesC = {
name: 'Carbon Dioxide',
data: []
};
var seriesM = {
name: 'Methane',
data: []
};
var seriesE = {
name: 'Ethane',
data: []
};
var seriesP = {
name: 'Propane',
data: []
};
var seriesIb = {
name: 'Iso-Butane',
data: []
};
var seriesNb = {
name: 'N-Butane',
data: []
};
var seriesIp = {
name: 'Iso-Pentane',
data: []
};
var seriesNp = {
name: 'N-Pentane',
data: []
};
var seriesHex = {
name: 'Hexanes+',
data: []
};
xml.each(function (i, record) {
options.xAxis.categories.push(new Date(parseInt($(record).find('sample_date').text())));
seriesH.data.push(parseFloat($(record).find('hydrogen').text()));
seriesHe.data.push(parseFloat($(record).find('helium').text()));
seriesO.data.push(parseFloat($(record).find('oxygen').text()));
seriesHs.data.push(parseFloat($(record).find('hydrogen_sulfide').text()));
seriesN.data.push(parseFloat($(record).find('nitrogen').text()));
seriesC.data.push(parseFloat($(record).find('co2').text()));
seriesM.data.push(parseFloat($(record).find('methane').text()));
seriesE.data.push(parseFloat($(record).find('ethane').text()));
seriesP.data.push(parseFloat($(record).find('propane').text()));
seriesIb.data.push(parseFloat($(record).find('iso_butane').text()));
seriesNb.data.push(parseFloat($(record).find('n_butane').text()));
seriesIp.data.push(parseFloat($(record).find('iso_pentane').text()));
seriesNp.data.push(parseFloat($(record).find('n_pentane').text()));
seriesHex.data.push(parseFloat($(record).find('hexanes_').text()));
});
console.log(seriesO.data);
if(seriesH.data >= .001){console.log("No Hydrogen Data")} else {options.series.push(seriesH)};
if(seriesHe.data >= .001){console.log("No Helium Data")} else {options.series.push(seriesHe)};
if(seriesO.data >= .001){console.log("No Oxygen Data")} else {options.series.push(seriesO)};
if(seriesHs.data >= .001){console.log("No H2S Data")} else {options.series.push(seriesHs)};
if(seriesN.data >= .001){console.log("No Nitrogen Data")} else {options.series.push(seriesN)};
if(seriesC.data >= .001){console.log("No Carbon Dioxide Data")} else {options.series.push(seriesC)};
if(seriesM.data >= .001){console.log("No Methane Data")} else {options.series.push(seriesM)};
if(seriesE.data >= .001){console.log("No Ethane Data")} else {options.series.push(seriesE)};
if(seriesP.data >= .001){console.log("No Propane Data")} else {options.series.push(seriesP)};
if(seriesIb.data >= .001){console.log("No Iso-B Data")} else {options.series.push(seriesIb)};
if(seriesNb.data >= .001){console.log("No N-B Data")} else {options.series.push(seriesNb)};
if(seriesIp.data >= .001){console.log("No Iso-P Data")} else {options.series.push(seriesIp)};
if(seriesNp.data >=.001){console.log("No N-P Data")} else {options.series.push(seriesNp)};
if(seriesHex.data >=.001){console.log("No Hexane+ Data")} else {options.series.push(seriesHex)};
console.log('options: ', options);
var chart = new Highcharts.Chart(options);
});
});
</script>
</head>
<body>
<div id="container" style=" width: 1000px; height: 600px; margin: 0 auto "></div>
</body>
</html>
这是API调用的XML输出
<qdbapi>
<action>API_DoQuery</action>
<errcode>0</errcode>
<errtext>No error</errtext>
<dbinfo>
<name>RESULT</name>
<desc/>
</dbinfo>
<variables>
<co2>Carbon Dioxide</co2>
<methane>methane</methane>
</variables>
<chdbids></chdbids>
<record>
<sample_date>1386892800000</sample_date>
<hydrogen>0.002</hydrogen>
<helium>0.114</helium>
<oxygen/>
<hydrogen_sulfide/>
<nitrogen>1.926</nitrogen>
<co2>0.454</co2>
<methane>82.163</methane>
<ethane>6.353</ethane>
<propane>4.760</propane>
<iso_butane>0.618</iso_butane>
<n_butane>1.819</n_butane>
<iso_pentane>0.491</iso_pentane>
<n_pentane>0.544</n_pentane>
<hexanes_>0.756</hexanes_>
<update_id>1408654196361</update_id>
</record>
<record>
<sample_date>1383782400000</sample_date>
<hydrogen>0.006</hydrogen>
<helium>0.038</helium>
<oxygen/>
<hydrogen_sulfide/>
<nitrogen>0.512</nitrogen>
<co2>0.844</co2>
<methane>83.178</methane>
<ethane>8.678</ethane>
<propane>3.631</propane>
<iso_butane>0.493</iso_butane>
<n_butane>1.097</n_butane>
<iso_pentane>0.342</iso_pentane>
<n_pentane>0.371</n_pentane>
<hexanes_>0.810</hexanes_>
<update_id>1408981434690</update_id>
</record>
<record>
<sample_date>1369699200000</sample_date>
<hydrogen>0.004</hydrogen>
<helium>0.060</helium>
<oxygen/>
<hydrogen_sulfide/>
<nitrogen>1.684</nitrogen>
<co2>0.443</co2>
<methane>77.742</methane>
<ethane>10.430</ethane>
<propane>6.842</propane>
<iso_butane>0.587</iso_butane>
<n_butane>1.482</n_butane>
<iso_pentane>0.232</iso_pentane>
<n_pentane>0.249</n_pentane>
<hexanes_>0.245</hexanes_>
<update_id>1408981112624</update_id>
</record>
</qdbapi>
我知道在我代码的最后半部分,if-else不起作用,因为数组中的值不是数字,而是NaN。我的问题是,如果我有NaN值,我将如何进行测试,如果我这样做了,不要将该序列推到图中。我不能完全删掉它,因为有些人实际上会有当前在NaN 上获得值的值
查看xml,这些值是有效的数字,因此不能是NaN。我在代码中发现的一个逻辑错误是,您正在将数组seriesH.data
与无效的数字.001
进行比较。
if(seriesH.data >= .001){console.log("No Hydrogen Data")} else {options.series.push(seriesH)};
您应该将数组的单个元素与数值测试进行比较。
if(seriesH.data[0] >= .001){console.log("No Hydrogen Data")} else {options.series.push(seriesH)};
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- JavaScript NaN equvialence
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 切换测试,如果是Nan
- 在JS数组中测试NaN
- 针对 NaN 的 Javascript 测试
- 如何测试某个事物是否与NaN相同
- 如何在JavaScript中测试NaN ?