Javascript多维数组问题

时间:2017-04-19 13:48:10

标签: javascript suitescript

我正在开发一个只能访问基础JS的项目,没有基于ERP脚本系统的控制台/警报等。

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

我的数据包含以下列

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

数据源我使用pulls 2搜索结果为每个SKU,一个用于2个位置," 13" &安培; " 4&#34 ;.我的目标是,如果该行的locid为4,我将使用可用字段添加到数组(由sku索引),如果locid为13,则我想将其添加到同一行,但字段名称略有不同(以aq为前缀。

下面的代码

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


}

我的问题是,无论我试图重写多少次,每当我输出项目[sku]时,特定数组只有一组值,即可用或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

1 个答案:

答案 0 :(得分:2)

好的,我最终将你的编辑和评论拼凑在一起。

您正尝试使用公共$items[sku]密钥在循环中多次填充sku

但是,您使用item[sku]

重置每次迭代的items[sku] = [];

所以有几件事:

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

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

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

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

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