Javascript 多维数组问题

Javascript Multidimensional Array Issue

我正在开发一个项目,该项目只能访问基于 ERP 脚本系统的基础 JS 没有 console/alerts 等。

我正在使用 ERP 系统输出进行搜索,本质上是 search[index].getValue(column[index]) 从中检索到的所有值都是正确且经过验证的。

我的数据包括以下列

sku, displayname, locid, onhand, onorder, committed, backordered, intransit, available, id

我正在使用的数据源为每个 SKU 提取 2 个搜索结果,每个 2 个位置“13”和“4”。我的目标是,如果该行的 locid 是 4,我将其添加到具有可用字段的数组(由 sku 索引),如果 locid 是 13,我想将它添加到同一行,但字段名称略有不同(以 q 为前缀)。

下面的代码

searchLength = search.length;   
    var items = [];
    for(var i = 0, len = search.length; i < len; i++) {

        var sku = search[i].getValue(columns[0]);
    //  html += search[i].getValue(columns[0]) + " - " + search[i].getValue(columns[1]) + " - " +search[i].getValue(columns[2]) + " - " +search[i].getValue(columns[3]) + " - " +search[i].getValue(columns[4]) + " - " +search[i].getValue(columns[5]) + " - " +search[i].getValue(columns[6]) + " - " +search[i].getValue(columns[7]) + " - " +search[i].getValue(columns[8]) + "<br>";
        items[sku] = [];

            items[sku]['displayname'] = search[i].getValue(columns[1]);
            items[sku]['id'] = search[i].getValue(columns[9]);
            items[sku]['loc'] =  search[i].getValue(columns[2]);


            if(search[i].getValue(columns[2]) == "4") {

                items[sku]['onhand'] = search[i].getValue(columns[3]);
                items[sku]['onorder'] = search[i].getValue(columns[4]);
                items[sku]['committed'] = search[i].getValue(columns[5]);
                items[sku]['backordered'] = search[i].getValue(columns[6]);
                items[sku]['intransit'] = search[i].getValue(columns[7]);
                items[sku]['available'] = search[i].getValue(columns[8]);
            } 
            if(search[i].getValue(columns[2]) == "13") {

                items[sku]['qonhand'] = search[i].getValue(columns[3]);
                items[sku]['qonorder'] = search[i].getValue(columns[4]);
                items[sku]['qcommitted'] = search[i].getValue(columns[5]);
                items[sku]['qbackordered'] = search[i].getValue(columns[6]);
                items[sku]['qintransit'] = search[i].getValue(columns[7]);
                items[sku]['qavailable'] = search[i].getValue(columns[8]);
            } 


}

我的问题是,无论我尝试重写多少次,每当我输出 items[sku] 时,特定数组只有一组值,即 available 或 qavailable 在数组中,从来没有。

我已经对此进行了数小时的调整,如果有人可以提供帮助,我确信我只是遗漏了一些小东西。

编辑下方以显示示例输出,其中所有字段都应出现在数组中,这是由以下函数生成的 http://locutus.io/php/var/var_dump/

array(1) {
    [ABC123456] =>
    array(9) {
            [displayname] =>
            string(39) "Product Display Name Here"
            [id] =>
            string(4) "4745"
            [loc] =>
            string(1) "4"
            [onhand] =>
            string(4) "6816"
            [onorder] =>
            string(0) ""
            [committed] =>
            string(4) "1872"
            [backordered] =>
            string(0) ""
            [intransit] =>
            string(0) ""
            [available] =>
            string(4) "4944"
    }
}

进一步编辑以显示进入函数的数据

ABC123456, Product Display Name Here, 13, 9552, , , , , ,9552
ABC123456, Product Display Name Here, 4, 6816, ,1872, , , ,4944

好的,我终于根据您的编辑和评论拼凑了它。

您正在尝试使用通用 sku 键在循环中多次填充 $items[sku]

但是,您在每次迭代时使用 items[sku] = [];

重置 item[sku]

所以有几件事:

  1. items[sku] 应该是对象而不是数组。

  2. 如果已设置,则不应重置为空对象。

因此,在代码段的第 7 行附近,将 items[sku] = []; 更改为:

if( !items.hasOwnProperty(sku) || typeof(items[sku]) != 'object' ){
  items[sku] = {};
}

这样你只设置一个已经空的空对象。