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]
所以有几件事:
items[sku]
应该是对象而不是数组。
如果已设置,则不应重置为空对象。
因此,在代码段的第 7 行附近,将 items[sku] = [];
更改为:
if( !items.hasOwnProperty(sku) || typeof(items[sku]) != 'object' ){
items[sku] = {};
}
这样你只设置一个已经空的空对象。
我正在开发一个项目,该项目只能访问基于 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]
所以有几件事:
items[sku]
应该是对象而不是数组。如果已设置,则不应重置为空对象。
因此,在代码段的第 7 行附近,将 items[sku] = [];
更改为:
if( !items.hasOwnProperty(sku) || typeof(items[sku]) != 'object' ){
items[sku] = {};
}
这样你只设置一个已经空的空对象。