parseFloat()未分析数组中的所有字符串。Javascript

parseFloat()未分析数组中的所有字符串。Javascript,javascript,arrays,parsing,Javascript,Arrays,Parsing,我正在用一个表中的列制作数组,用于绘制Flot图表。我首先沿着列向下,将每列存储为自己的数组,然后检查右边的列并重复 除了我遇到的一个小问题,我从最后一列中读取字符串值并将其解析为浮点数外,一切都进行得很顺利。最后一列中的所有值都解析为浮点值,只有少数值例外。有时是数组中的第0个和第2个元素,有时是第0个和第1个元素 下面是当Iconsole.log console.log数组:“> 表也称为;maintable: 正如您在最后一个数组中看到的,数组中的第0个和第2个值作为字符串返回,但其余值

我正在用一个表中的列制作数组,用于绘制Flot图表。我首先沿着列向下,将每列存储为自己的数组,然后检查右边的列并重复

除了我遇到的一个小问题,我从最后一列中读取字符串值并将其解析为浮点数外,一切都进行得很顺利。最后一列中的所有值都解析为浮点值,只有少数值例外。有时是数组中的第0个和第2个元素,有时是第0个和第1个元素

下面是当I
console.log

console.log数组:“>

表也称为
;maintable

正如您在最后一个数组中看到的,数组中的第0个和第2个值作为字符串返回,但其余值作为浮点返回

代码如下:

HTML:



JS:

var切片=[];
变量sliceNames、sliceNights、sliceNightsAvg、sliceRevs=[];
var切片集=[];
var colorplate=[];
//通过计算标题行中的单元格数来获取列数
var numOfColumns=$(“#maintable tr th”).length;
函数getCellData(数组,columnNum){
$(“#maintable tr td:n个子项(“+columnNum+”)。每个(函数(k,v){
if(!数组){
数组=[];
}
//将切片标签存储在数组中
数组[k]=$(this.text();
//删除单元格中的任何长空白
数组[k]=数组[k].trim();
//检查单元格中的数据是否为数字
if(parseFloat(数组[k])%1==0){
//过滤这些值
数组[k]=数组[k]。替换(“$”,“”);
数组[k]=数组[k]。替换(“,”,“”);
数组[k]=数组[k]。替换(“k”,“000”);
数组[k]=数组[k]。替换(“M”,“000000”);
//如果有小数点
/*if(数组[k].indexOf(“.”!=-1){
//然后将其解析为浮点
数组[k]=parseFloat(数组[k]);
}否则{
//否则,将其解析为整数
数组[k]=parseInt(数组[k]);
}*/
数组[k]=parseFloat(数组[k]);
}
});
返回数组;
}
//获取单元格数据
sliceNames=getCellData(sliceNames,1);
sliceNights=getCellData(sliceNights,2);
sliceNightsAvg=getCellData(sliceNightsAvg,3);
sliceRevs=getCellData(sliceRevs,4);
console.log(名称);
控制台日志(sliceNights);
console.log(sliceNightsAvg);
console.log(sliceRevs);
//循环并创建切片
对于(var i=0;i
我无法准确复制您的结果(一些数字正确,但其他数字不正确),但我非常确信,将
parseFloat(数组[k])%1==0
切换到
!isNaN(数组[k])
或类似选项将解决您的问题。

parseFloat(数组[k])%1===0
检查数字是否为整数。对于分数部分的数字将为false。这真的是您想要的吗?我将使用
isNaN()<代码>检查它是否是一个数字。@ Juhana,这是真的。但是我还是有点困惑它是如何为其他的工作的?考虑使用而不是<代码> PARSETIN <代码> >代码> PARSEFLASH ;它有更少的边缘情况。Juhana是正确的关于PARSEFITE(数组[k])的。%1==0对于非整数返回false,我本来打算在正式答案中包含它,但如何将任何浮点作为正确的类型输入?除非源值有时已经作为数字输入,否则除此之外还有另一个问题。
<div id="chart_container" class="widget-body col-md-12" style="height: 453px;">
    <section id="mainchart" class="col-md-12" style="height: 453px;"></section>
</div>
var slices = [];
var sliceNames, sliceNights, sliceNightsAvg, sliceRevs = [];
var sliceSet = [];
var colorPalette = [];



//Get number of columns by counting number of cells in the header row
var numOfColumns = $("#maintable tr th").length;

function getCellData(array, columnNum) {
    $("#maintable tr td:nth-child(" + columnNum + ")").each(function (k, v) {
        if(!array) {
            array = [];
        }

        //Store the slice labels in array
        array[k] = $(this).text();

        //Remove any long whitespace from cell
        array[k] = array[k].trim();



        //Check if the data in the cell is a number or not
        if (parseFloat(array[k]) % 1 === 0) {
            //Filter the values

            array[k] = array[k].replace("$", "");
            array[k] = array[k].replace(",", "");
            array[k] = array[k].replace("K", "000");
            array[k] = array[k].replace("M", "000000");

            //If there's a decimal
            /*if (array[k].indexOf(".") !== -1) {
                //Then parse as a float
                array[k] = parseFloat(array[k]);
            } else {
                //Otherwise, parse as an integer
                array[k] = parseInt(array[k]);
            }*/

            array[k] = parseFloat(array[k]);
        }
    });

    return array;
}

//Get cell data
sliceNames = getCellData(sliceNames, 1);
sliceNights = getCellData(sliceNights, 2);
sliceNightsAvg = getCellData(sliceNightsAvg, 3);
sliceRevs = getCellData(sliceRevs, 4);

console.log(sliceNames);
console.log(sliceNights);
console.log(sliceNightsAvg);
console.log(sliceRevs);

//Loop through and create the slices
for (var i = 0; i < sliceNames.length; i++) {
    if (!sliceSet) {
        sliceSet = [];
    }

    //Setup the slices
    var slice = {};
    slice.label = sliceNames[i];
    slice.data = sliceNights[i];

    //Push the slice to the set of slices
    sliceSet.push(slice);
}

//Plot the Pie chart
plotPieChart(sliceSet);


function plotPieChart(data) {
    $.plot($("#mainchart"), data, {
        series: {
            pie: {
                show: true,
                innerRadius: 0.3,
                label: {
                    show: true,
                    threshold: 0.01
                }
            },
            grid: {
                hoverable: true,
                clickable: true
            },
            legend: {
                show: true
            }
        }
    }); 
}