繁体   English   中英

为什么我不断收到TypeError:args.sort不是函数?

[英]Why do I keep getting a TypeError: args.sort is not a function?

function getIndexToIns(arr, num) {

  var args = Array.prototype.join.call(arguments);

  function compareNumbers(a, b) {
    return a - b;
  }
  args.sort(compareNumbers);

  return args;

}

getIndexToIns([40, 60], 50);

仅仅因为Array.prototype.join返回一个字符串而引发了错误。 为了将类似数组的对象转换为数组,您需要改用Array.prototype.slice.call

更换

 var args = Array.prototype.join.call(arguments);

有了这个

 var args = Array.prototype.slice.call(arguments);

或使用Function.prototype.apply

var args = Array.apply(null, arguments);

或使用Array.from

var args = Array.from(arguments);

最干净的解决方案是ES6 其余参数

function getIndexToIns(...args) {

  function compareNumbers(a, b) {
    return a - b;
  }
  args.sort(compareNumbers);

  return args;

}

getIndexToIns([40, 60], 50);

因为Array.prototype.join.call(arguments); 将返回字符串而不是数组,并且String没有排序方法。

更换

var args = Array.prototype.join.call(arguments);

var args = Array.apply(null, arguments);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM