Javascript 谷歌应用程序脚本-映射数组

Javascript 谷歌应用程序脚本-映射数组,javascript,arrays,google-apps-script,google-sheets,google-apps-script-editor,Javascript,Arrays,Google Apps Script,Google Sheets,Google Apps Script Editor,我正在从事一个项目,在该项目中,我获取多列/行库存表,并将其转换为多行/两列格式,用于订单分拣。 我有一个用于选择适当库存表的开关和一个map()函数,该函数从inventory DataRange()复制导入的信息 但是,并非所有数据都在一致的列中。我想做的是找到一个表达式,如果它所映射的列的值为零值或“”值,则该表达式将映射中的下一列 除非您需要,否则我不会提供完整的代码,但希望只提供重要的部分。 这就是我所拥有的: var source = SpreadsheetApp.openB

我正在从事一个项目,在该项目中,我获取多列/行库存表,并将其转换为多行/两列格式,用于订单分拣。 我有一个用于选择适当库存表的开关和一个map()函数,该函数从inventory DataRange()复制导入的信息

但是,并非所有数据都在一致的列中。我想做的是找到一个表达式,如果它所映射的列的值为零值或“”值,则该表达式将映射中的下一列

除非您需要,否则我不会提供完整的代码,但希望只提供重要的部分。 这就是我所拥有的:

    var source = SpreadsheetApp.openById("1xixIOWw2yGd1aX_2HeguZnt8G_UfiFOfG-W6Fk8OSTs"); //This sheet
    var srcSht = SpreadsheetApp.getActive();
    var sourceMenu = srcSht.getRange('A1');//This is the cell cotaining the dropdown
    var menuTest = sourceMenu.getValue();
  // Variable for the vars sheet. If it doesn't exist, create it
    var varsTest = source.getSheetByName('vars');
        if (!varsTest){source.insertSheet('vars');} 
    var importedA1 = varsTest.getDataRange().getA1Notation();
    varsTest.clearContents();

    var t1Imp = '=ImportRange("test1_Id", "Stock!A1:F11")';
    var varsData = varsTest.getRange('A1');// This is the cell we fill with the importRange formula


    varsData.setValue(t1Imp);
    var imported = varsTest.getDataRange().getValues();
    var newOrder = imported.map(function(item) {
        if (item[4] !== NaN){return [[item[0]],[item[4]]];};
        if (item[4] === NaN){return [[item[0]],[item[3]]];};}                         

    var orderRange = source.getSheetByName('Sheet1').getRange(10,1,newOrder.length, newOrder[0].length);

    orderRange.setValues(newOrder);
        Logger.log("\t" + newOrder);


Logger.log(newOrder): [(时间戳省略)]项目1、订单、焦糖、6、c&c、2、薄荷、3、PB、0、、项目2、焦糖、草莓、薄荷、PB、

它似乎跳过了if语句,或者我告诉它我打算将索引测试为NaN,这显然永远不会是真的

我还尝试用“未定义”替换“NaN”。同样的结果。我尝试查找项[4]。值,但它给了我一个错误。我还使用filter()而不是map()尝试了相同的逻辑,但它复制了整个数据集

我将这些值拉到工作簿中的新“vars”表上(以最小化对web服务的调用): 将它们减少到第一列和最后一列,然后输出:

“测试”表中第二组项目的“顺序”列中的单元格为空。该顺序列的值应该在该数组的项[3 ]中,但不能得到脚本来标识空白单元格是空的。 我对谷歌应用程序脚本和JS还不熟悉,但我看了很多教程,并在实践中学习。如果我找到了解决方案,我会发布它


谢谢你,没有这个社区,我不可能学到这么多

我有一个工作函数,可以实现我想要的功能。简言之: 我必须在一个新列中创建order列的副本,以便所有值都对齐。从技术上讲,这不是一个JS答案,但它是最简单的,并且遵循良好的电子表格规则

function rmZeroOrderPS(item){
    var source = SpreadsheetApp.openById("<sheetId>"); //This sheet
    var varsTest = source.getSheetByName('vars');
    var imported = varsTest.getDataRange().getValues();
    var i=-1;
    while (i <= imported.length){ 
      if(item[8]!= 0) {return [item[0],item[8]]};      
    i+=1;    
    };
函数rmZeroOrderPS(项目){
var source=SpreadsheetApp.openById(“”;//此工作表
var varsTest=source.getSheetByName('vars');
var imported=varsTest.getDataRange().getValues();
var i=-1;

while(欢迎使用SO!为了发布问题,您应该提供最低限度的信息作为输入样本和预期输出样本(如果需要),您尝试了什么以及您的研究。在这种情况下,没有样本很难帮助您。感谢您的回复。我一直在使用Google apps脚本进行该项目,并将用当前的问题修改此帖子。我可以问一下您的问题吗?1.
的值是:
是您的输出ect?如果是这样,你能提供导入的输入值吗?2.我认为当你提供一个包含你期望的输入和输出值的样本电子表格时,它会帮助用户想出解决方案。@Tanaike感谢你的回答!为了澄清,我得到的和期望的输出是第二个样本。第一个是值导入的。我将用真实的电子表格替换这些块。我添加了示例输入“test1”和输出“test”的完整源代码和屏幕截图