【问题标题】:Skipping blanks in a Javascript array跳过 Javascript 数组中的空白
【发布时间】:2020-01-12 23:11:40
【问题描述】:

我有一个循环数组函数,用于自动填充值。其中一些值是有意为空的。但是,该数组似乎为数组中的所有空白值分配了一个“未定义”标签。

function SubGroup_Update() {

  var Metrics = SpreadsheetApp.openById("10Wl1B4AtdLHJXBbLbMQbSdtRyAb61biCWYpOQEEywIY"); // METRICS spreadsheet
  var Data = SpreadsheetApp.getActiveSpreadsheet(); // DATA spreadsheet
  var SubsMetricSheet = Metrics.getSheetByName('Sub Group Metrics'); // METRICS "Sub Group" sheet 
  var SubGroupDataSheet = Data.getSheetByName("The Sub Group_Numbers") // DATA "Sub Group" sheet
  var SubGroupAllValues = SubGroupDataSheet.getRange(2, 1, SubGroupDataSheet.getLastRow() - 1, SubGroupDataSheet.getLastColumn()).getValues();
  var SubsDataLastRow = SubGroupDataSheet.getLastRow(); // Get the number for the amount of rows with info in the DATA "Sub Group" Sheet
  var FeedDataSheet = Data.getSheetByName("The Feed_Raw") // DATA "Feed" sheet
  var FeedAllValues = FeedDataSheet.getRange(2, 1, FeedDataSheet.getLastRow() - 1, FeedDataSheet.getLastColumn()).getValues();
  //var SubsDataRange = SubGroupDataSheet.getRange("A2:K");  // The entire range of cells in the DATA "Sub Group" Sheet, for sorting
  var SubGroupObj = {}; // Object for "Subgroup" values

  for (var SG = SubGroupAllValues.length - 1; SG >= 0; SG--) // for each row in the "Sub Group" sheet...
  {
    //... Add "Sub Group KEY (Col. #11 [K])" & "FYI Category Name (Col. #1 [A])" in Feed 2D Array.
    SubGroupObj[SubGroupAllValues[SG][10]] = SubGroupAllValues[SG][0];
  }


  for (var F = FeedAllValues.length - 1; F >= 0; F--) // for each row in the "Feed" sheet...
  {
    var Feed_SubGroupKey = FeedAllValues[F][92]; // ...Add "Sub Group (Col. #93 [CO])" in array. 
    {
      // If Sub Group array dont match "Sub Group Key (Col. #93 [CO])" & "FYI Topic Name (Col. #4 [D])... "
      if (SubGroupObj[Feed_SubGroupKey] != FeedAllValues[F][3]) {
        FeedAllValues[F][3] = SubGroupObj[Feed_SubGroupKey]; // ...Change FYI Category Name in FYI Topic Sheet 
      }
    }
  }

  // Decalare var. from 2nd row to last row of FYI Topic sheet
  var FeedDestinationRange = FeedDataSheet.getRange(2, 1, FeedAllValues.length, FeedAllValues[0].length);

  FeedDestinationRange.setValues(FeedAllValues); // placed changed FYI Category 2D array in Mod sheet

  var SubGroupAllRange = SubGroupDataSheet.getRange(2, 1, SubGroupDataSheet.getLastRow() - 1, SubGroupDataSheet.getLastColumn()); // complete range of Mod Status sheet 

  // Sort Sheet by - Category Name, then Category Topic
  SubGroupAllRange.sort([{
    column: 1,
    ascending: true
  }, {
    column: 2,
    ascending: true
  }]);

  Logger.log("The Sub Group Data Sheet has updated  " + SubsDataLastRow - 1 + " data files")

}

谁能帮我修改这个函数,让它跳过它在我的文件中找到的任何空白单元格?

【问题讨论】:

    标签: javascript arrays for-loop google-apps-script


    【解决方案1】:

    您尚未指定要过滤的数组,但是有两个选项。

    你在你的循环中检查它

    for(var F = FeedAllValues.length-1;F>=0;F--) {
        if (typeof FeedAllValues[F] !== 'undefined') {
    }
    

    或预先过滤数组

    FeedAllValues = FeedAllValues.filter(value => typeof value !== 'undefined')
    

    另外,您应该在循环之外定义 FeedAllValues.length 并使用变量,否则每次迭代都会调用 FeedAllValues.length

    【讨论】:

    • 感谢您的快速响应!如果这有助于您了解我正在尝试做什么,我会用完整的代码更新我的帖子。
    • 感谢有关 .length 的提示。我会确保修复我的代码以防止这种情况发生
    • 更新为更具体的@RobG
    【解决方案2】:

    您可以在测试不匹配单元格的同时测试空单元格,如下所示:

    for(var F = FeedAllValues.length-1;F>=0;F--) // for each row in the "Feed" sheet...
      {  
        var Feed_SubGroupKey = FeedAllValues[F][92]; // ...Add "Sub Group (Col. #93 [CO])" in array. 
        {
          // If Sub Group array dont match "Sub Group Key (Col. #93 [CO])" & "FYI Topic Name (Col. #4 [D])... "
          if ( (SubGroupObj[Feed_SubGroupKey] != FeedAllValues[F][3]) && ("" != FeedAllValues[F][3]) ) 
          { 
            FeedAllValues[F][3] = SubGroupObj[Feed_SubGroupKey]; // ...Change FYI Category Name in FYI Topic Sheet 
          }

    【讨论】:

    • 感谢您的快速响应!让我试一试,让你知道
    • 如果打算测试 undefined,那么与空字符串进行比较不是正确的测试,如'' != undefined。最好明确测试:... && typeof FeedAllValues[F][3] != undefined.
    • 工作就像一个魅力!我最初是 // if (FeedAllValues[F][92] != 'undefined' || FeedAllValues[F][92] != '') " 所以看来我只是语法错误。非常感谢帮忙。真的很感激。
    • @Neo—FeedAllValues[F][92] != 'undefined' 使用文字字符串“undefined”进行测试,而不是 undefined 值。
    • undefined != "" 在 JavaScript 中也可能有点奇怪——在使用 == 时,并非所有错误值都彼此相等。这是设计使然,但如果您不知道会发生什么,可能会让您措手不及。 (例如,undefinednull 总是被认为彼此松散相等,但没有其他值与它们相等。)请查看 sitepoint.com/javascript-truthy-falsy 了解详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2017-05-16
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多