【问题标题】:Trying to access array in JavaScript, result is undefined, no idea why尝试在 JavaScript 中访问数组,结果未定义,不知道为什么
【发布时间】:2020-04-21 00:45:02
【问题描述】:

我正在尝试运行一个非常基本的脚本来生成发票,现在我正处于测试阶段,试图解决我们正在使用的新 InfoPlus 系统的问题。无论如何,我将一个名为 ordersList 的二维数组声明为全局变量,然后向其中添加内容,我可以看到结果在 for 循环中是完美的,该循环遍历数组并记录每个值,我得到了发货的总和每个订单号旁边的数量。

然后,当我尝试再次访问该数组时,在脚本的更下方,我得到“未定义”的结果。我不知道为什么会这样,任何帮助将不胜感激。

utils.log("Running Invoice Worksheet Script..."); 
utils.log(""); 

utils.log("Viewing Input Entities"); 
var ordersList = [[]];
var incrementerDecrementer = 0;
var firstInputEntity = utils.inputEntities.get(0);
var skuTable = infoplusApi.search("item", "lobId eq '" + firstInputEntity.lobId + "'", null, 100, 'sku');
utils.log("SKU TABLE??? " + skuTable);
for(var i = 0; i < 2; i++)
{
    var itemID = skuTable.get(i);
    var finalItemID = itemID.toString();
    var colonPos = finalItemID.lastIndexOf(":");
    finalItemID = finalItemID.slice(colonPos+1);
    utils.log("Final ITEM ID: " + finalItemID);
    var pleaseGiveMeItemInfo = infoplusApi.getTags("item", finalItemID);
    utils.log("item info ?? " + pleaseGiveMeItemInfo);
}
//var SKUinfo = 
for(var i=0; i<utils.inputEntities.size(); i++) 
{
  var inputEntity = utils.inputEntities.get(i); 
  utils.log("       " + inputEntity.orderNo + " SKU: " + inputEntity.sku + " Shipped Qty: " + inputEntity.shippedQty); 
//  utils.log("       " + inputEntity.shippedQty);
  if(inputEntity.orderNo != ordersList[incrementerDecrementer][0])
  {
    var arrayToPush = [inputEntity.orderNo, parseInt(inputEntity.shippedQty)];
    ordersList.push(arrayToPush);
    incrementerDecrementer++;
  }
  else
  {
    ordersList[incrementerDecrementer][1] += parseInt(inputEntity.shippedQty);
  }
}
utils.log(""); 

utils.log("Manipulate data in the original lines..."); 

for(var i = 0; i < ordersList.length; i++)
{
    utils.log(ordersList[i]);
    utils.log("");
}

var orderIncrementer = 0;
for(var i=0; i< utils.inputEntities.size(); i++) 
{
  var line1 = utils.inputEntities.get(i);
  var line2 = null;
  if(i < (utils.inputEntities.size()-1))
  {
    line2 = utils.inputEntities.get(i+1);
  }
  else
  {
    line2 = utils.inputEntities.get(i);
  }
//  utils.log("     Original Line with id: " + line.lobId);
  utils.log("Line1 order num = " + line1.orderNo);
  if(line1.orderNo == line2.orderNo)
  {
    utils.log("Order numbers Match, setting extended charge to zero... ");
    line1.setExtendedCharge(0);

  }
  else
  {
    utils.log("orders list 0 1: " + ordersList[0][1]);
    utils.log("Order numbers don't match, setting extended charge to qty shipped: " + ordersList[orderIncrementer][1]);
    line1.setExtendedCharge(ordersList[orderIncrementer][1]);
    orderIncrementer++;
  }
  //line.description = "Test Change Description"; 
  //utils.setOutputLines(outputLines);
}

此处的日志输出:16432 是第一个订单号。问题是我应该获取数组值的未定义事物。

运行发票工作表脚本...

查看输入实体 SKU表??? [项目:849,项目:850,项目:234,项目:228,项目:232,项目:236,项目:238,项目:230,项目:226,项目:224,项目:225,项目:223,项目项目:235,项目:231,项目:233,项目:237,项目:227,项目:229,项目:244,项目:251,项目:240,项目:249,项目:246,项目:253,项目:250 ,项目:248,项目:243,项目:245,项目:252,项目:239,项目:242,项目:241,项目:247,项目:259,项目:261,项目:257,项目:255,项目项目:258,项目:260,项目:256,项目:254,项目:265,项目:271,项目:269,项目:273,项目:267,项目:263,项目:262,项目:266,项目:272 ,项目:268,项目:270,项目:264,项目:278,项目:281,项目:276,项目:280,项目:283,项目:274,项目:279,项目:282,项目:277,项目:284,项目:275,项目:285] 最终项目 ID:849 项目信息?? [] 最终项目 ID:850 项目信息?? [] 16432.000 SKU:BBL12P-0045 发货数量:0 25140.000 SKU:BBLSP-0037 发货数量:0 25140.000 SKU:BBLSP-0038 发货数量:0 25140.000 SKU:BBLSP-0039 发货数量:0 25140.000 SKU:BBLSP-0040 发货数量:0 25140.000 SKU:BBLSP-0041 发货数量:0 25146.000 SKU:BBLSP-0037 发货数量:1 25146.000 SKU:BBLSP-0038 发货数量:1 25146.000 SKU:BBPSP-0037 发货数量:1 25146.000 SKU:BBPSP-0038 发货数量:1 25146.000 SKU:BPC13-0007 发货数量:1 25146.000 SKU:BPC13-0008 发货数量:1 25146.000 SKU:BPC13-0009 发货数量:1 25146.000 SKU:BPC13-0012 发货数量:1 25153.000 SKU:BPC13-0007 发货数量:1 25153.000 SKU:BPC13-0008 发货数量:1 25153.000 SKU:BPC13-0009 发货数量:1 25153.000 SKU:BPC13-0010 发货数量:1 25153.000 SKU:BPC13-0012 发货数量:1 25158.000 SKU:BBPSP-0034 发货数量:2 25158.000 SKU:BBPSP-0035 发货数量:2 25158.000 SKU:BRZ1-0001 发货数量:2 25158.000 SKU:BRZ1-0004 发货数量:2 25960.000 SKU:BBPSP-0034 发货数量:0 25960.000 SKU:BBPSP-0037 发货数量:1 25960.000 SKU:BBPSP-0039 发货数量:1 25961.000 SKU:BBPSP-0034 发货数量:0 25961.000 SKU:BBPSP-0035 发货数量:1 26144.000 SKU:BBLSP-0040 发货数量:2 26144.000 SKU:BBPSP-0034 发货数量:2 26144.000 SKU:BBPSP-0035 发货数量:2 26144.000 SKU:BPC13-0011 发货数量:1 26146.000 SKU:BBPSP-0035 发货数量:1 26146.000 SKU:BBPSP-0039 发货数量:1 27793.000 SKU:BBPSP-0035 发货数量:0 27793.000 SKU:BBPSP-0039 发货数量:2 27793.000 SKU:BPC13-0012 发货数量:1 27793.000 SKU:BRZ1-0002 发货数量:1 27794.000 SKU:BPC13-0009 发货数量:4 27794.000 SKU:BPC13-0011 发货数量:5 27797.000 SKU:BBLSP-0040 发货数量:3 27797.000 SKU:BBPSP-0035 发货数量:3 27797.000 SKU:BBPSP-0037 发货数量:2 27797.000 SKU:BBPSP-0039 发货数量:3 27798.000 SKU:BBPSP-0037 发货数量:3 27798.000 SKU:BBPSP-0039 发货数量:4 27799.000 SKU:BBPSP-0037 发货数量:1 27800.000 SKU:BBPSP-0037 发货数量:1 27800.000 SKU:BBPSP-0039 发货数量:2 27800.000 SKU:BP9I-0002 发货数量:2 27800.000 SKU:BP9I-0004 发货数量:4 27801.000 SKU:BBPSP-0035 发货数量:2 27801.000 SKU:BBPSP-0037 发货数量:1 27801.000 SKU:BBPSP-0039 发货数量:1 27802.000 SKU:BBPSP-0037 发货数量:2 27802.000 SKU:BBPSP-0039 发货数量:2 27802.000 SKU:BPC13-0007 发货数量:2 27802.000 SKU:BPC13-0009 发货数量:2 27802.000 SKU:BPC13-0012 发货数量:2 27808.000 SKU:BBPSP-0037 发货数量:1 27808.000 SKU:BBPSP-0039 发货数量:2 27808.000 SKU:BPC13-0009 发货数量:1 27812.000 SKU:BBLSP-0038 发货数量:3 27812.000 SKU:BBPSP-0035 发货数量:1 27812.000 SKU:BRZ1-0002 发货数量:3 27828.000 SKU:BBPSP-0037 发货数量:2 27828.000 SKU:BBPSP-0038 发货数量:1 27828.000 SKU:BBPSP-0039 发货数量:1 27828.000 SKU:BP9I-0004 发货数量:4

在原始行中操作数据...

16432.000,0

25140.000,0

25146.000,8

25153.000,5

25158.000,8

25960.000,2

25961.000,1

26144.000,7

26146.000,2

27793.000,4

27794.000,9

27797.000,11

27798.000,7

27799.000,1

27800.000,9

27801.000,4

27802.000,10

27808.000,4

27812.000,7

27828.000,8

Line1 订单数量 = 16432.000 订单列表 0 1:未定义 订单号不匹配,将扩展费用设置为发货数量:未定义

【问题讨论】:

  • 在哪一行得到未定义?
  • 代码太多,我无法继续分析它。作为一个友好的建议,将该代码分解为多个函数,每个函数只执行一项简单的任务。调试和维护会容易得多。
  • 我在这一行未定义:utils.log("订单号不匹配,将扩展费用设置为发货数量:" + ordersList[orderIncrementer][1]);以及之前的行,您可以在日志输出中看到未定义的位置。

标签: javascript arrays


【解决方案1】:

我解决了这个问题。问题是当我最初使用 [[]] 将 ordersList 声明为 2D 数组时。这在我的数组中创建了一个未定义的数组,当我将新值推送到它上面时,该部分工作正常,但是当我尝试访问元素 0 时它返回未定义。当我尝试访问元素 1 或更高元素时,它运行良好。所以我只是使用一组括号“[]”将它声明为一个简单的数组,并对代码的其他区域进行了一些编辑,它开始正常工作。

希望这对可能遇到相同问题的其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多