如何在JavaScript中将“参数”对象转换为数组?

安德鲁·科尔森(Andrew Coleson):

argumentsJavaScript中对象是一个奇怪的疣-在大多数情况下它的行为就像一个数组,但实际上不是数组对象。因为它是真正的完全是另一回事,它没有从有用的功能Array.prototype类似forEachsortfilter,和map

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

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

但是,仅获得对极其有用的JavaScript数组函数的访问权限,这是一件非常可怜的事情。是否有使用标准库的内置方法?

乔纳森·芬兰(Jonathan Fingland):

ES6使用剩余参数

如果能够使用ES6,则可以使用:

休息参数

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

document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();

如您在链接中所读

rest参数语法允许我们将不确定数量的参数表示为数组。

如果您对...语法感到好奇,它称为Spread Operator,您可以在此处阅读更多内容

ES6使用Array.from()

使用Array.from

function sortArgs() {
  return Array.from(arguments).sort(function (a, b) { return a - b; });
}

document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();

Array.from 只需将类似Array或Iterable的对象转换为Array实例。



ES5

实际上,你可以只使用Arrayslice一个参数对象的功能,这将其转换成一个标准的JavaScript数组。您只需要通过Array的原型手动引用它即可:

function sortArgs() {
    var args = Array.prototype.slice.call(arguments);
    return args.sort();
}

为什么这样做?好吧,这是ECMAScript 5文档本身的摘录

注意:该slice函数是有意通用的;它不需要其this值是Array对象。因此,可以将其转移到其他类型的对象中作为方法。slice功能是否可以成功应用于主机对象取决于实现。

因此,slice可以在任何具有length属性的东西上工作,而这arguments很方便。


如果Array.prototype.slice对您来说太麻烦了,您可以使用数组文字来略微缩写:

var args = [].slice.call(arguments);

但是,我倾向于觉得以前的版本更明确,所以我更喜欢它。滥用数组字面量表示法会让人觉得很棘手,而且看起来很奇怪。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

如何在 JavaScript 中将多个数组对象转换为查询字符串参数

如何在Javascript中将数组转换为对象?

如何在JavaScript中将对象{}转换为键值对的数组[]

如何在JavaScript中将对象{}转换为键值对的数组[]

如何在jquery / javascript中将对象转换为数组

如何在javascript中将数组转换为对象?

如何在javascript中将json转换为数组对象?

如何在Javascript中将对象转换为数组

如何在javascript中将数组转换为特定对象?

如何在Javascript中将数组对象转换为XML

如何在Javascript中将数组转换为对象

如何在JavaScript中将数组转换为嵌套对象

如何在Javascript中将url数组查询转换为对象

如何在Javascript中将对象数组转换为关联数组对象

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

如何在javascript中将对象数组转换为数组数组

如何在Lodash中将对象数组转换为对象?

如何在AngularJs中将对象转换为对象数组?

如何在PHP中将数组数组转换为对象?

如何在 JavaScript 中将嵌套对象数组转换为具有键值对的对象

如何在JavaScript中将对象数组转换为一个对象?

如何在JavaScript中将{“ name”:“ myName”,“ value”:“ myValue”}对象的数组转换为“ myName”:“ myValue”对的对象?

如何在JavaScript中将对象数组(动态)转换为对象

如何在JavaScript中将对象数组转换为一个对象?

如何在javascript中将String类型的数组转换为数组对象

如何在javascript中将数组转换为数组对象,比如['in','gs']到[{"state":"in"},{"state":"gs"}]?

如何在 JavaScript 中将两个不同的数组转换为一个对象数组

如何在C#中将Json对象转换为数组