躲避這些會(huì)改變?cè)瓟?shù)組JavaScript數(shù)組方法讓開(kāi)發(fā)流暢無(wú)阻
JavaScript是一門非常靈活的語(yǔ)言,它提供了許多數(shù)組操作的方法來(lái)方便開(kāi)發(fā)人員對(duì)數(shù)組進(jìn)行操作。但是,有些數(shù)組的操作方法并不符合我們預(yù)期,容易導(dǎo)致想象不到的結(jié)果,尤其是可能會(huì)改變?cè)嫉臄?shù)組。因此,為避免這種情況的發(fā)生,本文將介紹哪些原生數(shù)組方法能改變?cè)瓟?shù)組以及我對(duì)于如何更好地使用數(shù)組方法的建議。
不會(huì)修改原數(shù)組的方法
在討論哪些數(shù)組的方法會(huì)改變?cè)瓟?shù)組之前,我們先來(lái)看看哪些方法不會(huì)改變?cè)瓟?shù)組。這里列舉常用數(shù)組方法以及是否會(huì)改變?cè)瓟?shù)組。
新增、查找、迭代
- concat(): 返回新數(shù)組,原數(shù)組不變
- includes(): 查詢?cè)厥欠翊嬖冢瓟?shù)組不變
- indexOf(): 查詢?cè)匚恢?,原?shù)組不變
- join(): 返回新字符串,原數(shù)組不變
- lastIndexOf(): 查詢?cè)匚恢?,原?shù)組不變
- slice(): 返回新數(shù)組,原數(shù)組不變
- toString(): 返回字符串,原數(shù)組不變
- values(): 返回迭代對(duì)象,原數(shù)組不變
非改變?cè)瓟?shù)組的操作
- filter(): 過(guò)濾出新數(shù)組,原數(shù)組不變
- find(): 查詢?cè)夭⒎祷?,原?shù)組不變
- findIndex(): 查詢?cè)匚恢貌⒎祷兀?原數(shù)組不變
- map(): 返回新數(shù)組,原數(shù)組不變
- reduce(): 返回一個(gè)累加器計(jì)算的結(jié)果,原數(shù)組不變
- some(): 判斷是否有符合條件元素,原數(shù)組不變
這些方法都可以讓你從數(shù)組中獲取想要的信息或新建一個(gè)新的數(shù)組或?qū)ο蟆.?dāng)你想要保留原來(lái)的數(shù)組時(shí),使用這些方法是非常有幫助和安全的。
會(huì)修改原數(shù)組的方法
push() 和 unshift()
盡管 JavaScript 提供了很多數(shù)組操作的方法,push()
和 unshift()
經(jīng)常被用到。它們往數(shù)組中添加一個(gè)元素,push()
在末尾添加,unshift()
在開(kāi)頭添加。但是,它們不像其他方法一樣返回新數(shù)組或者實(shí)現(xiàn)簡(jiǎn)單的查找功能,而是直接修改原始數(shù)組。
let numArr = [1, 2, 3] numArr.push(4) console.log(numArr) // [1, 2, 3, 4] let nameArr = ['Tom', 'Jerry'] nameArr.unshift('Lisa') // 3 console.log(nameArr) // ['Lisa', 'Tom', 'Jerry']
pop() 和 shift()
和 push()
、unshift()
方法相似,pop()
方法從數(shù)組末尾刪除最后一個(gè)元素并返回該元素值。而 shift()
方法則是從開(kāi)頭刪除第一個(gè)元素并返回該元素值。這兩個(gè)方法修改原數(shù)組并返回被刪除的元素。以下是一些示例:
let numArr = [1, 2, 3] numArr.pop() console.log(numArr) // [1, 2] let nameArr = ['Tom', 'Jerry'] nameArr.shift() console.log(nameArr) // ['Jerry']
當(dāng)你使用這兩個(gè)方法時(shí),注意不要忘記獲取被刪掉的元素的值。
reverse()
reverse()
方法將數(shù)組中的所有元素順序反轉(zhuǎn)并返回新的修改后的數(shù)組,但會(huì)在原始數(shù)組上進(jìn)行修改。
let numArr = [1, 2, 3] numArr.reverse() console.log(numArr) // [3, 2, 1]
雖然該方法可用于翻轉(zhuǎn)數(shù)組,但如果您希望保留原始數(shù)組,則需要提前在其上調(diào)用 slice()
方法以創(chuàng)建副本。
sort()
sort()
方法將數(shù)組排序,并返回修改后的數(shù)組。默認(rèn)情況下,它會(huì)按字母升序排序字符串,按數(shù)字升序排序數(shù)字。同樣,該方法也對(duì)原始數(shù)組進(jìn)行更改。
let numArr = [9, 2, 5, 1] numArr.sort() console.log(numArr) // [1, 2, 5, 9]
然而,如果你對(duì)數(shù)字?jǐn)?shù)組進(jìn)行排序,使用 sort()
需要注意其默認(rèn)行為。例如,以下是將數(shù)字?jǐn)?shù)組按照從大到小的順序排列的示例。
let numArr = [9, 2, 5, 1] numArr.sort(function(a, b) { return b - a; }); console.log(numArr); // [9, 5, 2, 1]
請(qǐng)注意,sort()
方法還有其他用法,請(qǐng)查閱相關(guān)資料獲取更多信息。
splice()
除了添加和刪除一個(gè)單一元素之外,splice()
還可以添加,刪除或替換多個(gè)元素。該方法的返回值為被刪除元素組成的新數(shù)組,同時(shí)也會(huì)修改原始數(shù)組。
let numArr = [1, 2, 3, 4] numArr.splice(2, 1, 'three') console.log(numArr) // [1, 2, "three", 4]
splice()
方法第一個(gè)參數(shù)表示從哪個(gè)位置開(kāi)始操作,第二個(gè)參數(shù)表示在該位置刪除幾個(gè)元素,后面可選參數(shù)則表示往數(shù)組中添加元素。這些操作都會(huì)改變?cè)瓟?shù)組,所以要格外留心。
最佳實(shí)踐
雖然有時(shí)我們需要修改原陣列,但是最好不要直接操作原始數(shù)組。使用 concat()
、slice()
和 map()
方法等能夠創(chuàng)建新數(shù)組的方法,可以有效地解決問(wèn)題。
let numArr = [1, 2, 3] let incrementedArr = numArr.map(function(num) { return num + 1; }); console.log(incrementedArr); // [2, 3, 4] console.log(numArr); // [1, 2, 3]
在使用原始數(shù)組時(shí),盡量避免這些會(huì)修改數(shù)組的方法,并考慮復(fù)制或備份原始數(shù)組以避免不必要的更改。
此外,還可以使用 Object.assign()
、Object.create()
等方法創(chuàng)建新的對(duì)象而不是直接修改源對(duì)象。這樣可以避免在應(yīng)用程序中對(duì)對(duì)象狀態(tài)進(jìn)行追蹤時(shí)產(chǎn)生困難,并且也有助于使您的代碼更加模塊化和容易維護(hù)。
結(jié)論
JavaScript 提供了許多數(shù)組操作的方法,但其中一些方法將修改原始數(shù)組。了解哪些數(shù)組操作方法可能會(huì)改變?cè)紨?shù)組對(duì)于前端開(kāi)發(fā)人員非常重要。在實(shí)際應(yīng)用中,如果誤用這些會(huì)修改原始數(shù)組的方法,可能會(huì)導(dǎo)致不可預(yù)測(cè)和缺陷的結(jié)果。因此,建議使用原始數(shù)組時(shí)更好地選用能夠創(chuàng)建新數(shù)組的方法,并注意備份原始數(shù)組以避免不必要的更改。
希望通過(guò)本文的介紹,讀者可以深入了解哪些數(shù)組原生方法會(huì)改變?cè)瓟?shù)組。盡管涉及到的方法數(shù)量不多,但是它們的功能和運(yùn)用場(chǎng)景區(qū)別顯著,具有重要的實(shí)用價(jià)值。在日常開(kāi)發(fā)中,開(kāi)發(fā)人員應(yīng)根據(jù)具體需求來(lái)選擇適合自己的方法,從而最大限度地利用JavaScript提供的強(qiáng)大功能優(yōu)勢(shì)。
到此這篇關(guān)于躲避這些會(huì)改變?cè)瓟?shù)組JavaScript數(shù)組方法讓開(kāi)發(fā)流暢無(wú)阻的文章就介紹到這了,更多相關(guān)JavaScript數(shù)組方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
京東優(yōu)選小程序的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了京東優(yōu)選小程序的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02js實(shí)現(xiàn)移動(dòng)端輪播圖滑動(dòng)切換
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)移動(dòng)端輪播圖滑動(dòng)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12textContent在Firefox下與innerText等效的屬性
textContent在Firefox下與innerText等效的屬性...2007-05-05高性能web開(kāi)發(fā) 如何加載JS,JS應(yīng)該放在什么位置?
所有瀏覽器在下載JS的時(shí)候,會(huì)阻止一切其他活動(dòng),比如其他資源的下載,內(nèi)容的呈現(xiàn)等等。至到JS下載、解析、執(zhí)行完畢后才開(kāi)始繼續(xù)并行下載其他資源并呈現(xiàn)內(nèi)容。2010-05-05微信小程序WebSocket實(shí)現(xiàn)聊天對(duì)話功能
這篇文章主要為大家詳細(xì)介紹了微信小程序WebSocket實(shí)現(xiàn)聊天對(duì)話功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07js實(shí)現(xiàn)會(huì)跳動(dòng)的日歷效果(完整實(shí)例)
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)會(huì)跳動(dòng)的日歷效果(完整實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10