【问题标题】:JavaScript 2D array iteration through one dimension doesn't work通过一维的JavaScript 2D数组迭代不起作用
【发布时间】:2014-01-12 18:14:20
【问题描述】:

我有一个基于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;
};

这样你就知道我的数组是如何制作的了……

无论如何,有了这个我有一个 Array[rows][cols] 可以使用。现在我想比较 array[rows][14] 的价格。我加载了一行,即现有产品(一维数组)和我的二维数组:

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));
}

我犯了什么愚蠢的错误?

【问题讨论】:

    标签: javascript jquery multidimensional-array


    【解决方案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
            };
        };
    };
    

    现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2011-08-15
      • 1970-01-01
      • 2021-04-02
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多