JS刪除數(shù)組指定值常用方法詳解
一. 刪除數(shù)組中所有指定值
先看一種危險的方式:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> window.onload = function() { var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]; console.log(`原始數(shù)組:${arr}`); arr.forEach((item, i) => { if (item == 3) { arr.splice(i, 1); // 從下標(biāo) i 開始, 刪除 1 個元素 } }) console.log(`刪除之后的數(shù)組:${arr}`); } </script> </body> </html>
輸出結(jié)果:
輸出的結(jié)果中,只刪除了一個3,這是因為splice方法刪除數(shù)組一個指定值之后,數(shù)組發(fā)生改變,后續(xù)的值向前挪動一個位置,在接下來的循環(huán)遍歷中,后面的3的下標(biāo)由原本的5變成了4,這就導(dǎo)致刪除操作之后,接著找下標(biāo)為5的值的時候,找不到后面的值3了,而從值為4的元素接著遍歷,當(dāng)要刪除的值不確實是1個的時候,這種遍歷刪除是危險的方式;
1. 如果使用splice方法循環(huán)遍歷的方式刪除指定值,一種保險的方式是逆向遍歷:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> window.onload = function() { var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]; console.log(`原始數(shù)組:${arr}`); for (let i = arr.length - 1; i > -1; i--) { if (arr[i] == 3) { arr.splice(i, 1); } } console.log(`刪除之后的數(shù)組:${arr}`); } </script> </body> </html>
輸出結(jié)果:
2. 使用filter方法過濾掉指定值:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> window.onload = function() { var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]; arr = arr.filter(item => item != 3); // 過濾掉值不為3,返回新數(shù)組 console.log(`filter方法操作之后的數(shù)組:${arr}`); } </script> </body> </html>
輸出結(jié)果:
注意: filter方法不改變原數(shù)組,只是返回一個新數(shù)組;
二. 刪除指定一個值
如果確定要刪除的值只有一個,除了遍歷查找刪除之后,還可以使用some方法:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> window.onload = function() { var arr = [1, 2, 3, 4, 5]; arr.some((item, i) => { if (item == 2) { arr.splice(i, 1); return true } }) console.log(`刪除之后的數(shù)組:${arr}`); } </script> </body> </html>
輸出結(jié)果:
注意: some方法找到符合條件的值手動返回true之后,不再接著遍歷(如果將some替換成forEach,return是不起作用的);
除此之外,還可以使用findIndex方法:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> window.onload = function() { var arr = [1, 2, 3, 4, 5]; console.log(`原始數(shù)組:${arr}`); var a = arr.findIndex(item => item == 3); arr.splice(a, 1); console.log(`刪除之后的數(shù)組:${arr}`); } </script> </body> </html>
輸出結(jié)果:
注意: findIndex只找到第一個符合條件的下標(biāo),找不到就返回 -1;
詳情查看MDN中關(guān)于數(shù)組的介紹:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用TypeScript?V8來改進您的JavaScript代碼
TypeScript?V8是一個強大的JavaScript類型系統(tǒng),它可以幫助你發(fā)現(xiàn)JavaScript代碼中的錯誤和潛在問題,并在編譯時捕獲它們,以便您可以解決它們,TypeScript?V8為JavaScript提供一系列的類型注釋,包括自定義類型和其他高級功能2023-08-08JS插件amCharts實現(xiàn)繪制柱形圖默認(rèn)顯示數(shù)值功能示例
這篇文章主要介紹了JS插件amCharts實現(xiàn)繪制柱形圖默認(rèn)顯示數(shù)值功能,結(jié)合實例形式分析了amCharts插件繪制柱形圖并顯示數(shù)值的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11微信小程序?qū)崿F(xiàn)點擊文字頁面跳轉(zhuǎn)功能【附源碼下載】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)點擊文字頁面跳轉(zhuǎn)功能,涉及navigator導(dǎo)航組件的簡單使用技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12JavaScript實現(xiàn)LRU緩存的三種方式詳解
LRU全稱為Least?Recently?Used,即最近使用的。針對的是在有限的內(nèi)存空間內(nèi),只緩存最近使用的數(shù)據(jù)(即get和set的數(shù)據(jù))。本文介紹了JavaScript實現(xiàn)LRU緩存的三種方式,需要的可以參考一下2022-06-06