类型错误:无法找到函数使用Array.prototype(TypeError: Cannot fin

2019-10-29 14:34发布

我有一个很简单的功能我想添加到一个数组。 我看到的这个网站,人们已经扩展不同的简单的项目,如String数组和实例。 但是,我也看到了评论,其中谷歌不允许延长某些类。 但是,从我所知道的,这是唯一的自定义谷歌类,如电子表格,范围等。

这是为什么抛出一个TypeError? 试图用我同样的功能在这里找到 。

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**

}

UPDATE

我也将增加,我设置的方法,只是返回这样一个值,只是为了测试,有与原型没有问题,它失败了同样的错误。

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;
}

Answer 1:

findIndex功能,搜索一维数组,然而,你有一个二维数组。 您必须更改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
}

UPDATE

Array.prototype.findIndex = function(search) {
  if(search === '') return false;
  for (var i = 0, len = this.length; i < len; i++)
    if (this[i][0] === search) return i;
  return -1;
}

function onEdit(e) {
  var search_text = 'Test String';
  var columnValues2D = [['String Test'], ['Test String']];
  Logger.log(columnValues2D.findIndex(search_text)); // <-- 1
}


文章来源: TypeError: Cannot find function When using Array.prototype