簡體   English   中英

為什么JS數組不包含peek()函數?

[英]Why does JS array not include a peek() function?

JavaScript數組包含使它像開箱即用的堆棧一樣處理的函數。 請參考push(...)pop() 如果語言的規范/開發人員想辦法使用push / pop函數以這種方式使數組像棧一樣,為什么會省略peek() (迫使我們總是需要索引數組的最后一個元素,例如arr[arr.length-1] )?

我意識到這可能是一個主觀的問題,但是我希望有人對有關我的Google Fu太弱而無法發掘的語言規范的決策/發布有所了解。

盡管名稱暗示了堆棧,但實際上並不是數組的常見用法。 當順序構造數組時,始終使用push() ,而與堆棧無關。 我認為pop()的使用並不多,但是它作為內置函數很有用,因為它結合了多個操作(獲取和刪除); 數組比不彈出元素更經常地按順序處理而不刪除。

peek()使用量會更少,而我想設計師只是覺得它不足以構建內置函數。 如您所述,手工完成的代碼非常簡單。

內置的替代arr[Math.floor(Math.random()*arr.length)]幾乎arr[Math.floor(Math.random()*arr.length)] peek()有用得多,但我們也沒有。

您必須在簡單的地方畫線。 此外,還有幾種方法可以處理偷看空數組(返回null,返回undefined或throw)。

迫使我們總是需要索引數組的最后一個元素

這不是真的,因為您可以根據需要為數組創建原型,也可以編寫包裝函數。 在以下示例中, 包裝函數實際上比所需的本機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)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM