最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin13浏览0评论

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

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

我已经读过pop()/shift()比使用slice()更高效。

这是我使用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);
回答如下:

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

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);
    }
  }
};
发布评论

评论列表(0)

  1. 暂无评论