我正在使用谷歌脚本来处理谷歌工作表文件。我正在尝试从两张纸中查找,匹配和格式化数据,并将结果插入第三张纸。
目前,我有一个函数为Sheet One中的每一行数据收集几列,并将它们输出到一个数组数组中。
我有另一个函数从Sheet Two中的一列收集数据,并返回我想在Sheet One中查找的一维代码数组。
这两个数组工作正常,是arrayOfData和codeArray的源代码(参见最终代码)。
为了说明我想要完成的事情,我创建了这个测试函数。它显示了没有循环的基本思想:
function test() {
var arrayOfData = ["01/06/2016", "JOE BLOGGS , AB12CDE , VIA APP - PYMT", -665];
var code = "AB12CDE";
var test = arrayOfData[1].indexOf(code);
var result = [];
if (test > -1) {
result.push(arrayOfData[0],code,arrayOfData[1],arrayOfData[2]);
}
return result;
}
这会输出正确的结果:
[01/06/2016, AB12CDE, JOE BLOGGS , AB12CDE , VIA APP - PYMT, -665.0]
我遇到的问题是当我尝试添加循环以循环访问更大的数据集时。
第一个循环遍历arrayOfData中的数组。 它包含第二个循环,它遍历codeArray中的'codes'以尝试找到匹配。
'code'将在arrayOfData的数组的第二项中,因此arrayOfData [i] [1]。
请参阅下面的代码(注意:没有任何代码可以将数据插入到下面的表3中,因为这将由另一个函数处理):
function main() {
// Array of Arrays
var arrayOfData = [["01/06/2016", "JOE BLOGGS , AB12CDE , VIA APP - PYMT", -225],
["01/06/2016", "JAY BLOGGS , ZX34CDF , VIA APP - PYMT", -665],
["01/06/2016", "JOHN BLOGGS , AG57HNE , VIA APP - PYMT", -500]]
// 1D Array
var codeArray = ["AG57HNE", "ZX34CDF", "AB12CDE"]
var dataLen = arrayOfData.length,
codeLen = codeArray.length,
i,
ii,
results = [];
// First loop iterates through each array in the arrayOfData
for(i = 0; i < dataLen; i++){
// Second loop iterates through each code for each row in ArrayOfData
for(ii = 0; ii < codeLen.length; ii++){
// test checks if the second item of the current inner array of arrayOfData contains the currently iterated code in codeArray
var test = arrayOfData[i][1].indexOf(codeArray[ii]);
// If statement checks if test is true
if (test > -1) {
// If true append the result to the results array.
results.push(arrayOfData[i][0],codeArray[ii],arrayOfData[i][1],arrayOfData[i][2]);
// If true, break Second loop to allow the First to iterate to the next inner array.
break;
}
}
}
Logger.log(results);
return results;
}
这会输出一个空数组。
我认为问题与if中的测试逻辑有关,但我似乎无法弄清楚发生了什么。
任何建议都将不胜感激。
答案 0 :(得分:2)
您可以使用一些数组方法来搜索和生成结果数组。
onSelectAll: function(aRowids, status) {
onSelectAllBefore(aRowids, status, function() {
$("input[id^='jqg_'].cbox:checked").each(function() {
//All are selecteds now :(
console.log("no success!");
});
});
function onSelectAllBefore(aRowids, status, callback) {
console.log("hello");
callback(aRowids, status);
}
&#13;
答案 1 :(得分:1)
这个代码片段的问题在于代码永远不会进入第二个for循环,你在codeLen上调用.length - 但这已经是长度值了。即只是一个简单的错字。如果你改变:
for(ii = 0; ii < codeLen.length; ii++){
到:
for(ii = 0; ii < codeLen; ii++){
你应该看到你的结果正在填充 p>