javascript - 为什么 JS 数组不包含 peek() 函数?
问题描述
JavaScript 数组包含的函数使其可以像开箱即用的堆栈一样处理。请参阅push(...)
和pop()
。如果语言的规范/开发人员不辞辛劳地使用 push/pop 函数以这种方式使数组类似于堆栈,为什么会被peek()
省略(迫使我们总是需要索引数组的最后一个元素,例如arr[arr.length-1]
)?
我意识到这可能是一个主观问题,但我希望有人知道关于我的 Google Fu 太弱而无法挖掘的语言规范做出/发布的决定。
解决方案
您必须在某处画线才能简单。此外,有几种方法可以处理偷看空数组(返回 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));
推荐阅读
- c# - Azure Function v2 和连接字符串
- javascript - 如何获取数组中对象的子集,将数组作为参数传递
- javascript - 模态窗口内的灯箱库
- sql - 对单个对象的交叉引用表
- javascript - 从 Typescript 中的类实例调用静态函数
- json - jq 生成的 shell 命令运行不正确
- macos - SwiftUI - 多行文本 macOS
- html - 位置:绝对不能相对于另一个 div 工作
- java - JDBC 驱动程序问题 (SQL Server 18)
- flutter - DART - 我如何知道数据是 JSONArray 还是 JSONObject