如何在JavaScript中将"arguments"对象转换为数组?

462
在JavaScript中,arguments对象是一个奇怪的点——它在大多数情况下表现得就像一个数组,但它实际上并不是一个真正的数组对象。由于它是完全不同的东西,因此它没有来自Array.prototype的有用函数,例如forEachsortfiltermap

使用简单的for循环可以轻松地从arguments对象构造一个新的数组。例如,这个函数对其参数进行排序:

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

然而,仅仅为了使用非常有用的JavaScript数组函数而进行这种操作是相当可悲的。是否有一种内置的方法可以使用标准库来实现?


我不喜欢这个问题的所有答案都认为有意图进行排序,而且“sort”已经渗透到了所有答案中,但是排序只是使用正确的数组可以做的事情之一。本意是要获取数组。我甚至不能责怪这个问题,因为它正确地说“例如”。然而,每个答案都决定将“sort”纳入将参数转换为数组的示例中 - 有时过于紧密地将排序与获取参数数组混为一谈。 - Wyck
21个回答

-2

这是一个非常古老的问题,但我认为我有一个比以前的解决方案更容易输入且不依赖外部库的解决方案:

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

2
如果您只有一个正整数参数,那么Array.apply将无法工作。这是因为new Array(3)创建了一个长度为3的数组。更具体地说,结果将是[undefined, undefined, undefined]而不是[3] - inf3rno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接