当前位置: 首页 > 面试题库 >

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

楚钊
2023-03-14
问题内容

想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。

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数组函数的访问权限,这是一件非常可怜的事情。是否有使用标准库的内置方法?


问题答案:

ES6使用剩余参数

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

休息参数

function sortArgs(...args) {

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

}



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

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我有一个像这样的字符串: 如何将其转换为这样的JavaScript对象? 问题答案: 此编辑根据注释改进并解释了答案。 例 分五个步骤进行解析: 解码URI:abc = foo&def = [asf]&xyz = 5 转义引号:相同,因为没有引号 替换并: 替换=: 带有卷发和引号的环绕: 这是合法的JSON。 一种 改进的解决方案 允许在搜索字符串中包含更多字符。它使用reviver

  • 本文向大家介绍如何在JavaScript中将arguments对象转换为数组?,包括了如何在JavaScript中将arguments对象转换为数组?的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中使用Array.from()方法将arguments对象转换为数组 示例

  • 问题内容: 我有一个对象数组: 如何通过JavaScript将其转换为以下内容? 问题答案: 您可能正在寻找这样的东西:

  • 我要转换如下所示的对象: 键值对的数组,如下所示: 如何在JavaScript中将对象转换为键值对数组?

  • 问题内容: 我需要将JSON对象字符串转换为JavaScript数组。 这是我的JSON对象: 我想拥有: 我该如何实现? 问题答案: var json_data = {“2013-01-21”:1,”2013-01-22”:7}; var result = [];

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果: