捕获两个数组

时间:2016-05-27 19:05:57

标签: google-apps-script google-sheets

我有两个数组,我正在尝试创建两个数组之间差异的第三个数组。但是,我很难思考它。 下面的代码显然是错误的。我想,如果我将第一个数组与第二个数组进行比较,我可以捕捉到差异。但是,我意识到它不能完全适用于下面的脚本,因为从技术上讲,第一个数组中的项目总是不同,第二个数组中的至少一个记录会导致它被添加到第三个数组中。我需要修改什么来使第一个数组通过整个第二个数组,如果它不匹配所有项目然后将其推入第三个?提前感谢您的指导

function range(){
  var ran1 = ["1","2","3"];
  var ran2 = ["4","5","3","6"];
  var result = new Array();
  for(var i = 0; i < 3; i++){  
    for(var j = 0; j < 4; j++){
     if(ran1[i] != ran2[j])
        {
           result.push(ran1[i]); 
        }
    }
  }
    Logger.log(result);
}

**编辑 我尝试将你的脚本原则应用于我的。 namesInSchSheet是一个包含多列的单行数组。 namesInContactSheet中的值是从包含多行的单个列中提取的。当我显示两个阵列的日志时,它们看起来不同,我假设它为什么不能工作。我是不是正确地提供了来自namesInSchSheet(单行w /多列中的值)的数据?

 var ss = SpreadsheetApp.getActiveSheet(); 
 var ss2 = SpreadsheetApp.getActive();
 var ss3 = SpreadsheetApp.openById(ss2.getId());
 var ss4 = ss3.getSheetByName('Contacts');

 var lastCol = ss.getLastColumn();
 var schRange =  ss.getRange(4, 3, 1, lastCol-2);
 var contactRange = ss4.getRange(2, 4, 8 , 1);
 var namesInContactSheet = contactRange.getValues();
 var numCols = schRange.getNumColumns();
 var conNumRows = contactsheet.getLastRow();
 var addnew = new Array();

 for(var i = 0; i < conNumRows; i++){
 for(var j = 0; j < numCols; j++){
 for(var k = 0; k < speakername.length; k++){
    if(namesInSchSheet[k][j].indexOf(namesInContactSheet[j]==-1)){
        addnew.push(namesInContactSheet[i]);
        }
      }
    }
 }
 Logger.log(addnew);

1 个答案:

答案 0 :(得分:1)

例如,使用2个连续循环和indexOf数组方法:

function range(){
  var ran1 = ["1","2","3"];
  var ran2 = ["4","5","3","6"];
  var result = new Array();
  for(var i = 0; i < ran1.length; i++){  
    if(ran2.indexOf(ran1[i])==-1){
      result.push(ran1[i]); 
    }
  }
  Logger.log('first loop : '+result);
  for(var i = 0; i < ran2.length; i++){
    if(ran1.indexOf(ran2[i])==-1){
      result.push(ran2[i]); 
    }
  }
  Logger.log('second (final) loop : '+result);
}

结果:

  • 第一个循环: 1,2
  • 秒(最终)循环: 1,2,4,5,6

编辑:

你的问题在第一版中有点不清楚。在您的情况下,主要问题是,在电子表格中读取值时获得的数组是2维数组,即数组数组,工作表中的每一行都是一个列元素数组,结构如下:

[[cell A1],[cell A2],[cell A3], ...]

为了能够使用我建议的indexOf方法,您必须将其转换为&#34; normal&#34; array ...处理单行数据时最简单的方法是加入它,然后将其拆分为默认逗号,如下所示:

[[cell A1],[cell A2],[cell A3]].join().split(',')

这将返回[cell A1,cell A2,cell A3],这是行中所有元素的简单数组。 从那里使用indexOf方法,如果参数包含在源中,它将返回源中参数的位置,否则返回-1。 小心以正确的方式使用它:

sourceArray.indexOf(argument) = position of argument in sourceArray