如何在JavaScript中将“参数”对象转换为数组?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

保持可爱mmm 2020-01-14 15:04:35 131

argumentsJavaScript中的对象是一个奇怪的疣-在大多数情况下,它的行为就像一个数组,但实际上不是数组对象。因为它是真正的完全是另一回事,它没有从有用的功能Array.prototype类似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数组函数所要做的事情是相当可怜的。是否有使用标准库的内置方法?

javascript对象数组 javascript转换对象 javascript如何在对象 javascript参数对象 scr参数
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-01-14 15:05:01

    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

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

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

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

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

    因此,slice可以在任何具有length属性的东西上正常工作arguments。

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

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

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

    问题来源于stack overflow

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

相似问题
最新问题
推荐课程