首页 > 解决方案 > 为什么 JS 数组不包含 peek() 函数?

问题描述

JavaScript 数组包含的函数使其可以像开箱即用的堆栈一样处理。请参阅push(...)pop()。如果语言的规范/开发人员不辞辛劳地使用 push/pop 函数以这种方式使数组类似于堆栈,为什么会被peek()省略(迫使我们总是需要索引数组的最后一个元素,例如arr[arr.length-1])?

我意识到这可能是一个主观问题,但我希望有人知道关于我的 Google Fu 太弱而无法挖掘的语言规范做出/发布的决定。

标签: javascript

解决方案


您必须在某处画线才能简单。此外,有几种方法可以处理偷看空数组(返回 null、返回未定义或抛出)。

迫使我们总是需要索引数组的最后一个元素

这不是真的,因为您可以根据需要对数组进行原型设计,或者编写一个包装函数。在以下示例中,包装函数实际上比您想要的本机 API 少 1 个字符peek(a)a.peek()

function peek_or_null(array) {
  if (array.length === 0) {
    return null;
  }
  return array[array.length - 1];
}

function peek(array) {
  if (array.length === 0) {
    throw new Error('out of bounds');
  }
  return array[array.length - 1];
}

Array.prototype.peek = function() {
  if (this.length === 0) {
    throw new Error('out of bounds');
  }
  return this[this.length - 1];
}

const a = [1, 2, 3];
console.log(a.peek());
console.log(peek(a));
console.log(peek_or_null(a));


推荐阅读