我有两个数组,我正在尝试创建两个数组之间差异的第三个数组。但是,我很难思考它。 下面的代码显然是错误的。我想,如果我将第一个数组与第二个数组进行比较,我可以捕捉到差异。但是,我意识到它不能完全适用于下面的脚本,因为从技术上讲,第一个数组中的项目总是不同,第二个数组中的至少一个记录会导致它被添加到第三个数组中。我需要修改什么来使第一个数组通过整个第二个数组,如果它不匹配所有项目然后将其推入第三个?提前感谢您的指导
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);
答案 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);
}
结果:
你的问题在第一版中有点不清楚。在您的情况下,主要问题是,在电子表格中读取值时获得的数组是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