javascript - pop()/shift() 方法返回原始数组

标签 javascript node.js

我了解到 pop()/shift() 的性能明显优于使用 slice()https://jsperf.com/pop-vs-slice/5

这是我使用 slice() 的用例:

proto.wrapErrorFirst = proto.wrapErrFirst = function (fn: Function) {
  const self = this;
  return function (err: IPseudoError) {
    if (err) {
      return self.__handle(err, false);
    }
    try {
      // remove the error-first argument
      return fn.apply(this, Array.from(arguments).slice(1));
    }
    catch (err) {
      return self.__handle(err, false);
    }
  }
};

所以这应该更高效:

  proto.wrapErrorFirst = proto.wrapErrFirst = function (fn: Function) {
      const self = this;
      return function (err: IPseudoError) {
        if (err) {
          return self.__handle(err, false);
        }
        try {
          const args = Array.from(arguments);
          args.shift()
          return fn.apply(this, args);
        }
        catch (err) {
          return self.__handle(err, false);
        }
      }
    };

但我想知道是否有一种方法可以用更少的代码来做到这一点,也许有一种方法可以不需要调用 Array.from(arguments) 来做到这一点?

也许有点疯狂像这样:

delete arguments[0];
return fn.apply(this, arguments);

最佳答案

您可以通过任何方式从参数创建新数组,但您也想跳过第一个元素。 在您的情况下,最有效的方法是在 arguments 上使用 Array.prototype 中的 slice 方法。因此,您不需要像第一种情况那样创建临时数组,然后对其进行切片,也不需要像第二种情况那样删除第一个元素。

proto.wrapErrorFirst = proto.wrapErrFirst = function (fn: Function) {
  const self = this;
  return function (err: IPseudoError) {
    if (err) {
      return self.__handle(err, false);
    }
    try {
      const args = Array.prototype.slice.call(arguments, 1);
      return fn.apply(this, args);
    }
    catch (err) {
      return self.__handle(err, false);
    }
  }
};

关于javascript - pop()/shift() 方法返回原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841660/

相关文章:

javascript - 在 react-native 中查找组件的特定子项

javascript - iOS 8 css 旋转元素消失

node.js - 如何使用 Node Promise 从 Oracle 返回多个结果集

javascript - Jquery Node js的Keydown事件?

javascript - 删除 LINES 开头和结尾的空格

javascript - CSS Sprite 是如何工作的?

javascript - 设置匿名函数的名称

javascript - 如何编写 typescript 方法来复制 javascript 方法

javascript - Rails Webpacker - 未捕获的 TypeError : $(. ..).tooltip 不是函数

javascript - JqueryUi DatePicker - 禁用不同月份的日期