gpt4 book ai didi

javascript - 使用循环遍历数组以在 indexOf 中使用

转载 作者:行者123 更新时间:2023-11-30 11:54:04 25 4
gpt4 key购买 nike

我正在使用谷歌脚本来处理谷歌表格文件。我正在尝试从两张工作表中查找、匹配和格式化数据,并将结果插入第三张工作表。

目前,我有一个函数可以为 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 中的“代码”以尝试找到匹配项。

“代码”将位于 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 中的测试逻辑有关,但我似乎无法弄清楚发生了什么。

如有任何建议,我们将不胜感激。

最佳答案

您可以使用一些数组方法来搜索和生成结果数组。

function main() {
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]],
codeArray = ["AG57HNE", "ZX34CDF", "AB12CDE"],
results = [];

arrayOfData.forEach(function (a) {
var code;
codeArray.some(function (b) {
if (a[1].indexOf(b) !== -1) {
code = b;
return true;
}
}) && results.push(a[0], code, a[1], a[2]);
});
return results;
}

console.log(main());

关于javascript - 使用循环遍历数组以在 indexOf 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38584894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com