通过一个维度的JavaScript 2D数组迭代不起作用

时间:2013-12-24 13:39:50

标签: javascript jquery multidimensional-array

我将基于Excel的产品列表另存为.txt。我将其加载到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;
};

这就是你知道我的阵列是如何制作的......

无论如何,有了这个我有一个数组[行] [cols]可以使用。现在我有一个数组[行] [14]的价格,我想比较。我加载一行是现有的produkt(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'这样的东西是没有价值的”(德语Internet Explorer 9 ...)。

这是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 个答案:

答案 0 :(得分: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
        };
    };
};

现在工作正常。