Array.from

ECMAScript 2014 中有一个方法可以将参数转换为数组。
我们可以像这样使用 Array.from() 或者扩展运算符:

function sortArgs(...args) {
  return args.sort(function (a, b) {
    return a - b;
  });
}
console.log(sortArgs(21, 5, 4, 8).toString());

Array.from() 方法用于从类数组或者可迭代对象创建一个新的、浅复制的 Array 实例。

JS如何将参数对象转换为数组

arguments 对象是一个类数组对象,它表示执行函数时传入的参数。

要将其转换为数组,我们将在本文范围内讨论几种方法。

slice()

当slice()方法被正常调用时,表示这是一个Array,该方法迭代那个Array并正常工作。

slice() 函数中的 this 被接受为数组,因为当我们调用以下对象时,该对象会自动成为 method() 中的 this 值:

object.method();

让我们考虑以下情况:

[1,2,3].slice()

[1,2,3] 数组集将作为 slice() 中 this 的值。

但是,如果我们替换其他内容,例如,具有数字 .length 属性或者一组作为此值的数字索引的属性,它应该可以工作。
这种对象通常被称为类数组对象。

类 Array 对象意味着参数具有长度属性和从零开始索引的属性,但它没有 Array 的内置方法,例如 forEach() 和 map()。

call() 和 apply() 方法允许在函数中手动设置 this 的值。

如果将 slice() 中的 this 值设置为类似数组的对象,它会将其视为数组,并执行与数组相同的操作。

让我们看一下这个例子:

let obj = {
  '0': 'zero',
  '1': 'one',
  '2': 'two',
  '3': 'three',
  length: 4
};
let sliced = Array.prototype.slice.call(obj, 2);
console.log(sliced);

这不是一个数组,但如果你可以将它设置为 slice() 的 this 值,那么它就会像一个数组一样工作。

以下是将参数对象设置为 this 值时 slice() 方法的工作原理。

剩下的参数

如果我们使用 ES6,其余参数可以完成任务:

function sortArgs(...args) {
  return args.sort(function (a, b) {
    return a - b;
  });
}
console.log(sortArgs(21, 5, 4, 8).toString());

其余参数语法允许将无限数量的参数表示为数组。

日期:2020-06-02 22:16:12 来源:oir作者:oir