为什么我一直得到一个TypeError:args.sort不是一个函数?

时间:2016-04-04 07:19:18

标签: javascript

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

2 个答案:

答案 0 :(得分:2)

错误被抛出只是因为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 rest parameters

function getIndexToIns(...args) {

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

  return args;

}

getIndexToIns([40, 60], 50);

答案 1 :(得分:0)

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

替换

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

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