Array.prototype.splice 的一個坑
在 JS 中,陣列在需要移除元素的時候,只能通過索引值來移除:
var container = [];
container.push("a");
container.push("b");
container.push("c"); // ["a", "b", "c"]
var idx = container.indexOf("z"); // -1
container.splice(idx, 1); // ["c"]
之後我想到 JS 對於負值引數,會從陣列的結尾算起始點。那我這樣寫是否可以呢:
container.splice(idx < 0 ? -Infinite : idx, 1); // ["a"]
而使用 Infinite
是可以的:
container.splice(idx < 0 ? Infinite : idx, 1); // []
在查詢了規範後發現,這個起始位置是按照如下規則定義的:
22.1.3.26Array.prototype.splice ( start, deleteCount, ...items ) ...
- If relativeStart < 0, let actualStart be max((len + relativeStart), 0); else let actualStart be min(relativeStart, len).
也就是對於絕對值小於 len
的負數,效果是從陣列的尾部開始查詢起始位置,但是當絕對值大於 len
的時候,起始位置就是 0
。
可以這樣理解,引數的正負號決定了查詢的方向,實際查詢範圍為[-len, len]。
PS: 在 ES6 中我們可以愉快的使用 Set ,而無需再使用陣列進行模擬啦!
相關文章
- 強大的Array.prototype.splice()
- 分享一個composer的坑
- PHP Composer 的一個小坑PHP
- Golang Recover的一個小坑Golang
- go select case的一個小坑Go
- 建立 UIWindow 被忽視的一個坑UI
- Redis 修改過期 key 的一個坑Redis
- ConfigParser.ConfigParser()中set的一個坑
- 踩一個Flutter Hot Reload的新坑Flutter
- 使用 NSUserDefaults 儲存字典的一個坑
- 學習openresty時,nginx的一個坑RESTNginx
- 分享一個 SpringCloud Feign 中所埋藏的坑SpringGCCloud
- 一個android 的HAL示例中遇到的坑。Android
- 8種最坑的SQL錯誤用法,第一個就很坑?SQL
- iOS layoutMargins 的坑:一個活久見的 bugiOS
- 向大家分享一個shell指令碼的坑指令碼
- 關於performSelector:afterDelay:的一個坑及思考performSelector
- 踩了 Golang sync.Map 的一個坑Golang
- linux安裝nginx時遇到的一個坑LinuxNginx
- 記一個TS 列舉順序的坑
- WinUI 剪裁釋出中的一個小坑UI
- 初見React,一步一個坑React
- nodejs request module裡的json引數的一個坑NodeJSJSON
- 舒服了,學習了,踩到一個 Lombok 的坑!Lombok
- 記一個 Docker 映象無法執行的坑Docker
- C++基礎(十二)一個巨集使用的坑C++
- Tomcat應用部署是否要一個蘿蔔一個坑?Tomcat
- 今天踩了一個基礎坑
- 又踩坑了!BigDecimal使用的5個坑!Decimal
- 初學 GoLang 遇到的一個關於時間的坑...Golang
- foreach使用引用時的一個坑-foreach原始碼分析原始碼
- golang連線達夢資料庫的一個坑Golang資料庫
- 一個百度富文字編輯器的坑
- sql server中的一個坑-len與datalength區別SQLServer
- 記前端狀態管理庫Akita中的一個坑前端
- gogs同一個坑進去兩次…Go
- spring中<context:property-placeholder/>一個坑SpringContext
- 記一次uboot升級過程的兩個坑boot