首页 > 解决方案 > 在 if 语句中查看数组的所有实例?

问题描述

我有大约 20 张不同的工作表,我编写了一些谷歌脚本来将所有数据合并到一个主工作表中。现在我希望能够排除某些工作表。我这样做的想法是将这些工作表的名称存储在一个变量中。到目前为止,这是我所拥有的,但我遇到了错误?有任何想法吗?

label 是我正在扫描每张工作表的列的名称,masterSheetName 是我存储数据的工作表。

 if (sheetName !== masterSheetName && sheetName !== skippedsheets) 

线路是我遇到问题的线路。它不会通过所有跳过工作表的实例。

有没有办法用 for each 循环来做到这一点?

function getColVals(label, masterSheetName) {

  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var colValues = []
  for ([i,sheet] in sheets) {
    var sheetName = sheet.getSheetName();
    var skippedsheets = ["HHS 1","HHS 2"];
    Logger.log(skippedsheets);
    Logger.log(skippedsheets[0]);
    if (sheetName !== masterSheetName && sheetName !== skippedsheets) {
    var colValues2 = getColValues(label,sheetName);
    colValues = colValues.concat(colValues2);
    } 

  }
  return colValues; 

}

谢谢你,杰罗姆

标签: arraysstringif-statementgoogle-apps-script

解决方案


我发现有人编写并共享了这个名为 inArray 的函数,它运行良好。

function getColVals(label, masterSheetName) {

  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var colValues = []
  for ([i,sheet] in sheets) {
    var sheetName = sheet.getSheetName();
    var skippedsheets = ["template","intro","games"];
    // Logger.log(skippedsheets);
    // Logger.log(skippedsheets[0]);
    if (sheetName !== masterSheetName && !(skippedsheets.inArray(sheetName))) {
    var colValues2 = getColValues(label,sheetName);
    colValues = colValues.concat(colValues2);
    Logger.log(sheetName);
    } 

  }
  return colValues; 

}


/*
 * @function
 * @name Object.prototype.inArray
 * @description Extend Object prototype within inArray function
 *
 * @param {mix}    needle       - Search-able needle
 * @param {bool}   searchInKey  - Search needle in keys?
 *
 */
Object.defineProperty(Object.prototype, 'inArray',{
    value: function(needle, searchInKey){

        var object = this;

        if( Object.prototype.toString.call(needle) === '[object Object]' || 
            Object.prototype.toString.call(needle) === '[object Array]'){
            needle = JSON.stringify(needle);
        }

        return Object.keys(object).some(function(key){

            var value = object[key];

            if( Object.prototype.toString.call(value) === '[object Object]' || 
                Object.prototype.toString.call(value) === '[object Array]'){
                value = JSON.stringify(value);
            }

            if(searchInKey){
                if(value === needle || key === needle){
                return true;
                }
            }else{
                if(value === needle){
                    return true;
                }
            }
        });
    },
    writable: true,
    configurable: true,
    enumerable: false
});

推荐阅读