我有一个非常简单的函数,我想添加到数组中。我在这个网站上看到过人们扩展了不同简单项目的例子,比如String&阵列。但我也看到谷歌不允许你扩展某些课程的评论。但据我所知,这只适用于自定义Google类,如Spreadsheet,Range等。
为什么会抛出TypeError?试图使用相同的函数I found here。
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (this[i] == search) return i;
return -1;
}
//Do a search on a specific range, find the correct ID, and do a lookup based on ID
function onEdit(e) {
var e = {};
e.value = "Test String";
var client = e.value;
var columnValues = mydoc.getRangeByName(categoryRangeName).getValues();
//columnValues returns 2D array of values
//https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()
var searchResult = columnValues.findIndex(e.value); //**ERROR HERE**
}
更新
我还要补充一点,我设置方法只是返回一个这样的值,只是为了测试原型没有问题,并且它在同样的错误上失败了。
Array.prototype.findIndex = function(val) {
return val;
}
我创建了一个具有相同for循环的函数,它工作得很好。
function findIndex(vals, search) {
if(search == "") return false;
for (var i=0; i<vals.length; i++)
if (vals[i] == search) return i;
return -1;
}
答案 0 :(得分:2)
{1}}函数,在1D数组上搜索,但是,您有一个2D数组。您必须更改findIndex
功能才能搜索2D阵列。
findIndex
<强>更新强>
Array.prototype.findIndex = function(search) {
if(search === '') return false;
for (var i = 0, len = this.length; i < len; i++)
if (this[i] === search) return i;
return -1;
}
function onEdit(e) {
var search_text = 'Test String';
var columnValues1D = ['String Test', 'Test String'];
var columnValues2D = [['String Test'], ['Test String']];
Logger.log(columnValues1D.findIndex(search_text)); // <-- 1
Logger.log(columnValues2D[0].findIndex(search_text)); // <-- -1
Logger.log(columnValues2D[1].findIndex(search_text)); // <-- 0
}