JavaScript中的arguments对象是一个奇怪的东西——它在大多数情况下就像一个数组,但实际上它不是一个数组对象。因为它是完全不同的东西,它没有数组中的有用函数。比如forEach, sort, filter和map。

用简单的for循环从arguments对象构造一个新数组非常简单。例如,这个函数对它的参数进行排序:

function sortArgs() {
    var args = [];
    for (var i = 0; i < arguments.length; i++)
        args[i] = arguments[i];
    return args.sort();
}

然而,仅仅为了访问非常有用的JavaScript数组函数,就必须这么做,这是一件相当可怜的事情。是否有一种内置的方法来使用标准库?


当前回答

function sortArg(){
var args = Array.from(arguments); return args.sort();
}

函数sortArg () ( 瓦尔·阿格斯=阵列。 重返args sort (); ) ”,类游戏机。log (sortArg(20、1、2、目标、88、’19’、39、’d’’z’’ak’’bu’、90);

其他回答

function sortArg(){
var args = Array.from(arguments); return args.sort();
}

函数sortArg () ( 瓦尔·阿格斯=阵列。 重返args sort (); ) ”,类游戏机。log (sortArg(20、1、2、目标、88、’19’、39、’d’’z’’ak’’bu’、90);

Use:

function sortArguments() {
  return arguments.length === 1 ? [arguments[0]] :
                 Array.apply(null, arguments).sort();
}

阿雷(arg1, arg2, ..)

数组(str1)返回[str1]

Array(num1)返回一个包含num1个元素的数组

您必须检查参数的数量!

数组中。切片版(较慢):

function sortArguments() {
  return Array.prototype.slice.call(arguments).sort();
}

数组中。推送版本(比切片慢,比切片快):

function sortArguments() {
  var args = [];
  Array.prototype.push.apply(args, arguments);
  return args.sort();
}

移动版本(较慢,但小尺寸更快):

function sortArguments() {
  var args = [];
  for (var i = 0; i < arguments.length; ++i)
    args[i] = arguments[i];
  return args.sort();
}

数组中。Concat版本(最慢):

function sortArguments() {
  return Array.prototype.concat.apply([], arguments).sort();
}

另一个答案。

使用黑魔法咒语:

function sortArguments() {
  arguments.__proto__ = Array.prototype;
  return arguments.slice().sort();
}

Firefox、Chrome、Node.js、IE11都可以。

尝试使用Object.setPrototypeOf()

解释:将参数的原型设置为Array.prototype

函数toArray() { 返回对象。Array.prototype setPrototypeOf(参数) } console.log (toArray(“abc”,123年,{def: 456}, [0, [7, [14]]]))


说明:取参数的每个索引,将item放入数组中对应的数组索引处。

也可以使用Array.prototype.map()

function toray () return键[]文件夹。电话(论据,(_,k,a) => a[k]) 的 控制台日志(toArray(“abc”,123,{def: 456} [0, [7], [14]])


说明:取参数的每个索引,将item放入数组中对应的数组索引处。

循环的. .

函数toArray() { Let arr = [];For (let prop of arguments) arr.push(prop);返回加勒比海盗 } console.log (toArray(“abc”,123年,{def: 456}, [0, [7, [14]]]))


或Object.create ()

说明:创建对象,将对象的属性设置为每个参数索引处的项;设置创建对象的原型为Array.prototype

函数toArray() { Var obj = {}; For (var prop in arguments) { Obj[道具]= { 价值:参数(道具) 可写:没错, 可列举的:真的, 可配置:真 } } 返回Object.create(数组。原型,obj); } console.log (toArray(“abc”,123年,{def: 456}, [0, [7, [14]]]))

下面是将参数转换为数组的几个方法的基准测试。

对我来说,对于少量的争论,最好的解决办法是:

function sortArgs (){
  var q = [];
  for (var k = 0, l = arguments.length; k < l; k++){
    q[k] = arguments[k];
  }
  return q.sort();
}

其他情况:

function sortArgs (){ return Array.apply(null, arguments).sort(); }