Javascript Can';t sort数组作为参数传递到函数中(TypeError,无法调用未定义的sort方法)

Javascript Can';t sort数组作为参数传递到函数中(TypeError,无法调用未定义的sort方法),javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在使用GoogleApps脚本为工作表编写一个脚本,我正在将数组作为参数传递到函数中,我想对其中的数组进行排序,并返回一个新数组,该数组在排序后也经过了一些操作。我从另一个线程中获取了一些代码 守则: function removeDupes(array) { var outArray = []; array.sort(); //sort incoming array according to Unicode outArray.push(array[0]); //first on

我正在使用GoogleApps脚本为工作表编写一个脚本,我正在将数组作为参数传递到函数中,我想对其中的数组进行排序,并返回一个新数组,该数组在排序后也经过了一些操作。我从另一个线程中获取了一些代码

守则:

function removeDupes(array) {
  var outArray = [];
  array.sort(); //sort incoming array according to Unicode
  outArray.push(array[0]); //first one auto goes into new array
  for(var n in array){ //for each subsequent value:
    if(outArray[outArray.length-1]!=array[n]){ //if the latest value in the new array does not equal this one we're considering, add this new one. Since the sort() method ensures all duplicates will be adjacent. V important! or else would only test if latestly added value equals it.
      outArray.push(array[n]); //add this value to the array. else, continue.
    }
  }
  return outArray;
}   
array.sort()返回错误

TypeError:无法调用未定义的方法“sort”。(第91行,文件 “代码”)”


。如何对作为参数传入此函数的数组执行sort()方法?

错误很明显,无论您使用什么代码调用
removeDupes
都不会传递实际数组,否则
.sort()方法将对传入参数起作用。[旁注:如果您对删除重复项感兴趣,为什么需要对阵列进行排序?]

除此之外,方法可以过滤出重复项,而无需执行所有循环。而且,即使循环数组,也不应使用
for/in
循环,因为它们用于枚举具有字符串键名称的对象,而不是数组。数组循环应该使用常规计数循环,
.forEach()
或许多自定义的循环方法之一来完成

var testArray=[“苹果”、“班纳纳”、“橙色”、“苹果”、“橙色”];
删除的功能(arr){
//.filter方法迭代所有数组项并调用
//每次迭代的回调函数。回调函数本身
//将自动传递对当前正在执行的数组项的引用
//枚举,数组中该项的索引和对
//正在迭代的数组。将从
//包含回调函数返回的任何内容。
返回arr.filter(函数(项、索引、输入阵列){
//如果当前正在枚举的项的索引相同
//作为数组中项目第一次出现的索引,返回
//该项目。如果没有,不要。
返回inputArray.indexOf(item)=索引;
});
}
var FILTEREDARAY=移除的数据集(测试阵列);

控制台日志(filteredArray)能否在代码中显示此函数的用法?在我看来,您可能实际上正在将它
未定义
作为参数传递,即使是无意的。错误很明显。调用
removeDupes(array)
的任何代码实际上都不会传递数组。我们不知道为什么会出现此错误,直到我们可以看到传入的实际数组的内容。您将
undefined
作为参数,或者调用了没有参数的dunction,顺便说一句。使用
进行迭代。。。in
是不可取的。另外(与问题无关),
for/in
循环用于使用键而不是数组循环对象。使用
.forEach()
或标准计数循环迭代数组。