我有两个值数组。我想使用一个数组的元素作为indexof
函数的参数。但是,即使我知道该值存在于数组中,我仍然得到-1
(表示未找到值)。
我已经通过对indexof
参数中的值进行硬编码来测试了这一点,因此在这种情况下,我知道我的问题出在cur_data变量上。当我用cur_data[x]
对'xyz'
进行硬编码时,indexof
返回正确的索引,但是当我使用数组值[xyz]
时,它返回-1
。
我在做什么错了?
function iterateSheets() {
var price_data = SpreadsheetApp.openById('1Nttb7XqUlZwGtmwbcRc3QkY3f2rxx7XdsdEU3cK4K4').getSheetByName('price').getRange("A2:A353").getValues()
var price_data2 = price_data.map(function(r) {
return r[0];
});
var test = new Array(30)
var ts = SpreadsheetApp.openById('18qFvVMVEE1k5DWUYaSezKeobcLr8I4oAmHLUpd_X99k');
var allShts = ts.getSheets();
for (var i = 0; i < 1; i++) //allShts.length //need to add in code to make sure tab is one of the fcst tabs
{
var cur_data = allShts[i].getRange("B8").getValues()
if (allShts[i].getName() == "July" || allShts[i].getName() ==
"Aug" || allShts[i].getName() == "Sept") {
for (var x = 0; x < 1; x++) {
Logger.log(cur_data[x])
Logger.log(price_data2.indexOf(cur_data[x]));
}
}
}
}
答案 0 :(得分:2)
决定将评论转换为答案:
二维值数组
getValues()
方法从Array
返回一个二维Range
值,该值应通过values[row][column]
模式进行访问。您的for
循环仅增加第一维(即行),而从不通过列引用访问该值。因此,您最终将Array
传递给indexOf()
方法。
修改
您可以添加第二个for
循环以迭代值Array
的每个元素,并修改第一个循环以使其更灵活,以防万一您需要循环多行:
for (var x = 0; x < cur_data.length; x++) {
for (var y = 0; y < cur_data[x].length; y++) {
Logger.log(cur_data[x][y])
Logger.log(price_data2.indexOf(cur_data[x][y]));
}
}
比较
indexOf()
方法通过严格相等比较执行搜索,然后开始有趣的部分。由于Array
本质上是对象,因此适用于对象的比较规则也适用于Array
对象。这意味着没有两个对象相等(请看一下比较结果表)。
有用的链接