JavaScript中一维数组的迭代在二维数组中无法正常工作

3

我有一个以.txt格式保存的基于Excel的产品列表。我按照以下方式将其加载到JavaScript中:

function make2DArray (pfad){
    var Daten = loadFile(pfad);
    var Array = createArray(Daten);
    return Array;
}

function createArray(data_in){
    var Zeilen = data_in.split("\n");
    var Spalten = new Array();

    for (var i=0; i<Zeilen.length; i++)
    {
        Spalten = Zeilen[i].split("\t");
        Zeilen[i] = Spalten.splice(0, Spalten.length);
    }
    return Zeilen;
};

function loadFile(file_in)
{
    var file_out;
    $.ajax({
        type:     "GET",
        url:      file_in,
        dataType: 'text',
        async:    false,
        success:  function(data){
            file_out = data;
        },
        error: function(){
            openDialog('Datei nicht gefunden', file_in + " konnte nicht gefunden werden.\n<br />Bitte wende dich an einen Troubleshooter oder Teamleader!");
        }
    });

    return file_out;
};

这样你就知道我的数组是如何生成的了...

无论如何,我现在有一个Array[rows][cols]来处理。现在我有一个价格在array[rows][14]中,我想要进行比较。我加载了一行现有产品(1D数组)和我的2D数组:

function PackAusfiltern (arrzeile, arr) {
    var Eingabearray = arr;
    var Ausgabearray = "";

    var BestandPreis = arrzeile[14];
    BestandPreis = BestandPreis.replace(/\,/g, '.');
    BestandPreis = parseFloat(BestandPreis);
    //Here I get the price of the existing package which I want to compare

现在来说我的实际问题:

我想逐行遍历,获取第14列的值并将其转换为数字(有些数字存储为“39,90”,因此我需要更改“,”为“。”)。

我总是在这一行中遇到错误:

var zwischenspeicher = Eingabearray[i][14]+"";

它大概意思是:“无法获取属性'14'的值”(来自德国IE9浏览器...)。下面是一个 for 循环,用于获取值并将其转换为数字,比较并删除元素。其中第二行已经出现了错误。
for (var i=0, j=Eingabearray.length; i<j; i++) {
    var zwischenspeicher = Eingabearray[i][14]+"";
    zwischenspeicher = zwischenspeicher.split(',').join('.');
    zwischenspeicher = parseFloat(zwischenspeicher);
    Eingabearray[i][14] = zwischenspeicher;
    if ((BestandPreis <= Eingabearray[i][14]) && Eingabearray[i][16] == 1)
    {
    var löschenPO = Eingabearray.indexOf(Eingabearray[i][17]); // Find other pack code
    var löschenindex = Eingabearray.indexOf(löschenPO); // Search other pack
    Eingabearray = Eingabearray.splice(löschenindex, 1);    // Delete other pack
    }
 };

仅供参考:

for (var i=0, j=Eingabearray.length; i<j; i++) {
  alert(Eingabearray[i][14]); //= '39.90'

并且

type(Eingabearray[i][14]); //= [object Number]

function type(obj){
    alert(Object.prototype.toString.call(obj));
}

我犯了什么愚蠢的错误?

1个回答

1

我不得不插入一个if(Eingabearray[i]),因为错误来自一些空行...

所以:

for (var i=0, j=Eingabearray.length; i<j; i++) {

    if (Eingabearray[i]){

        if ((BestandPreis <= Eingabearray[i][14]) && Eingabearray[i][16] == 1)
        {
            var löschenPO = Eingabearray.indexOf(Eingabearray[i][17]); // Find other pack code
            var löschenindex = Eingabearray.indexOf(löschenPO); // Search other pack
            Eingabearray = Eingabearray.splice(löschenindex, 1);    // Delete other pack
        };
    };
};

现在正常运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接