TypeError:找不到函数使用Array.prototype时

时间:2013-12-08 15:25:24

标签: google-apps-script

我有一个非常简单的函数,我想添加到数组中。我在这个网站上看到过人们扩展了不同简单项目的例子,比如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;
}

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
}