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()
- MySQLtimestamp的一個坑MySql
- 一個蘿蔔一個坑
- 分享一個composer的坑
- Golang Recover的一個小坑Golang
- 小程式canvas的一個坑Canvas
- PHP Composer 的一個小坑PHP
- python第一個坑Python
- 學習openresty時,nginx的一個坑RESTNginx
- 建立 UIWindow 被忽視的一個坑UI
- Redis 修改過期 key 的一個坑Redis
- 使用 NSUserDefaults 儲存字典的一個坑
- MVC Json方法裡的一個坑MVCJSON
- 一個Flex 對話方塊的坑Flex
- go select case的一個小坑Go
- 8種最坑的SQL錯誤用法,第一個就很坑?SQL
- 踩了 Golang sync.Map 的一個坑Golang
- 踩一個Flutter Hot Reload的新坑Flutter
- 向大家分享一個shell指令碼的坑指令碼
- WinUI 剪裁釋出中的一個小坑UI
- 關於ThreadLocal變數的一個坑thread變數
- 【Linux】一個坑比的crontab問題Linux
- PHP5.3中in_array()的一個坑PHP
- 記一個TS 列舉順序的坑
- 一個android 的HAL示例中遇到的坑。Android
- 初見React,一步一個坑React
- 啊哈C——學習6.5一個蘿蔔一個坑
- iOS layoutMargins 的坑:一個活久見的 bugiOS
- 記一個 Docker 映象無法執行的坑Docker
- 關於performSelector:afterDelay:的一個坑及思考performSelector
- 分享一個 SpringCloud Feign 中所埋藏的坑SpringGCCloud
- C++基礎(十二)一個巨集使用的坑C++
- linux安裝nginx時遇到的一個坑LinuxNginx
- 記HTML5 <a> 標籤的一個小坑HTML
- intervention/image 中的一個小坑及其破解之法
- CodeIgniter中使用CSRF TOKEN的一個坑
- 舒服了,學習了,踩到一個 Lombok 的坑!Lombok
- 今天踩了一個基礎坑