国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript數(shù)組(四):判斷數(shù)組相等的4種方法

這篇具有很好參考價(jià)值的文章主要介紹了JavaScript數(shù)組(四):判斷數(shù)組相等的4種方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

在JavaScript中,數(shù)組本質(zhì)上是一種特殊的對(duì)象,它的類型值會(huì)返回 object
如果我們需要比較兩個(gè)數(shù)組是否相等,不能像比較基本類型(String、Number、Boolean等)一樣,使用 === (或 ==) 來判斷,所以如果要比較數(shù)組是否相等,需要使用一些特殊方法。關(guān)于JS類型的判斷,可見博文 typeof使用詳解。

本文總結(jié)了幾種數(shù)組比較的方法,方便我們碰到類似問題時(shí)能快速處理:

  1. 循環(huán)比較
  2. toString方法
  3. join方法
  4. JSON.stringify

需要說明的,這里只針對(duì)數(shù)組元素為原始類型(String、Number、Boolean)的情況。
如果數(shù)據(jù)元素是復(fù)雜類型,如Object、Function等等,則無法通過這些方法進(jìn)行簡(jiǎn)單比較了,需要另行特殊處理。而且當(dāng)存在這類復(fù)雜類型時(shí),比較數(shù)組是否相等已經(jīng)意義不大,本文不做討論。

這也是關(guān)于數(shù)組的第四篇博文,前面三篇如下:

JavaScript數(shù)組(一):類型、判斷、索引與length屬性
JavaScript數(shù)組(二):創(chuàng)建方式、構(gòu)造函數(shù)、空元素與in運(yùn)算符
JavaScript數(shù)組(三):類數(shù)組對(duì)象

循環(huán)比較

使用循環(huán)的方法一一比較數(shù)組元素的值,可能是我們最先能想到的方式。
循環(huán)比較大概可分為兩種方式,一種是使用 for、while 等循環(huán)語句,相對(duì)簡(jiǎn)單,如下代碼所示:

const arr1 = [1, 2, 3], arr2 = [1, 2, 3]
// 需要判斷兩個(gè)數(shù)組長(zhǎng)度
arr1.length === arr2.length
// 一一比較元素值,有一個(gè)不相等就不等
for (let i = 0; i < arr1.length; i++) {
  if (arr2[i] !== arr2[i]) {
    return false
  }
}

另外一種就是使用數(shù)組的循環(huán)類實(shí)例方法,如 foreach、map 等處理數(shù)組循環(huán)的實(shí)例方法,和使用 for 語句較類似,同樣能達(dá)到目的。
而使用 everysome、filter 等這類實(shí)例方法,則代碼實(shí)現(xiàn)上會(huì)更簡(jiǎn)單一些,如下所示:

const arr1 = [1, 2, 3], arr2 = [1, 2, 3]
// 使用every
arr1.length === arr2.length && arr1.every((v,i) => v === arr2[i])
// 使用some
arr1.length === arr2.length && !arr1.some((v, i) => v !== arr2[i])
// 使用filter
arr1.length === arr2.length && arr1.filter((v, i) => v !== arr2[i]).length === 0
// 使用find和findIndex
arr1.length === arr2.length && arr1.findIndex((v, i) => v !== arr2[i]) === -1

當(dāng)我們進(jìn)行循環(huán)相關(guān)的比較的時(shí)候,都使用的是嚴(yán)格相等 ===,會(huì)先判斷類型是否相等。
但如果需要忽略元素類型時(shí),可以使用 ==,這樣,會(huì)自動(dòng)對(duì)數(shù)組元素進(jìn)行類型轉(zhuǎn)換后再比較,如 true == 1 會(huì)成立。

toString

toString 方法是Object類型對(duì)象的實(shí)例方法,而JS中Object是幾乎所有類型的基類,所以其他類型都能調(diào)用該方法。(null和undefined例外,沒有實(shí)例方法。)
toString方法的作用是返回一個(gè)對(duì)象的字符串形式,這里,我們用它來返回?cái)?shù)組的字符串形式的數(shù)據(jù)。

[1,2,3].toString() // '1,2,3'

以上代碼,就是返回?cái)?shù)組 [1,2,3] 的字符串形式,以逗號(hào)分給元素組成字符串?dāng)?shù)據(jù),返回的 '1,2,3'。
如果數(shù)組元素是復(fù)雜類型,如Object對(duì)象,則toString返回的結(jié)果將不同:

[1,2,{}].toString() // '1,2,[object Object]'

這里toString方法對(duì) {} 直接返回的是 [object Object]

鑒于此,我們比較數(shù)組元素為原始類型的數(shù)組時(shí),可以如下這樣使用:

[1,2,3].toString() === [1, 2, 3].toString() // true

需要注意的是,如果數(shù)組元素為數(shù)字的字符串形式,結(jié)果也是相同的:

['1', 2, 3].toString() // '1,2,3'
[1,2,3].toString() === ['1', 2, 3].toString() // true

join

join 方法是數(shù)組的一個(gè)實(shí)例方法。
它有一個(gè)可選參數(shù),可以作為分隔符,以該分隔符分隔所有數(shù)組元素組成字符串?dāng)?shù)據(jù)返回,如果不加參數(shù),默認(rèn)是以逗號(hào)分割。
通過join方法的用法,我們就能知道,如果不提供分隔符的參數(shù),它對(duì)數(shù)組所起的作用看上去和 toString 方法幾乎一樣。

[1,2,3].join() === [1, 2, 3].join() // true
[1,2,3].join() === ['1', '2', '3'].join() //true

當(dāng)然,也可以添加分隔符,效果是一樣的,如使用空字符:

[1,2,3].join('') // '123'
[1,2,3].join('') === ['1', '2', '3'].join('') //true

由上可知,既然join不帶參數(shù)和toString方法幾乎一樣,那它們互相之間的比較,本質(zhì)上都是數(shù)組轉(zhuǎn)換成逗號(hào)分隔的字符串,所以也是相等的:

[1, '2', true].join() === [1, '2', true].toString() // true
[1, '2', true].toString() === [1, '2', true].join() // true

JSON.stringify

JSON.stringify 用于將一個(gè)對(duì)象或值轉(zhuǎn)換成JSON字符串,如果是數(shù)組,一般會(huì)這樣轉(zhuǎn)換:

JSON.stringify([1, '2', true]) // '[1,"2",true]'

利用這個(gè)特點(diǎn),我們就能通過它進(jìn)行數(shù)組的常規(guī)比較:

[1, 2, 3] === [1, 2, 3] // false
JSON.stringify([1, 2, 3]) === JSON.stringify([1, 2, 3]) // true
JSON.stringify([1, '2', true]) === JSON.stringify([1, '2', true]) // true

需要注意的是,JSON.stringify處理字符串是轉(zhuǎn)換結(jié)果會(huì)帶雙引號(hào):

JSON.stringify(['1']) // '["1"]'
JSON.stringify(['1']) === '["1"]' // true
JSON.stringify(['1']) === '[\'1\']' // false

關(guān)于JSON.stringify方法更多的知識(shí),可查看博文 JSON使用詳解。

當(dāng)數(shù)組元素是空元素、null、undefined時(shí)

以上介紹的數(shù)組元素的類型都是原始類型(String、Number、Boolean),但數(shù)組元素還可以是另外三種特殊情況:空元素null、undefined,接下來將簡(jiǎn)單介紹下出現(xiàn)這三種情況時(shí)的比較方式。

null 和 undefined

當(dāng)使用 JSON.stringify 方法時(shí),空元素、null、undefined這三種類型的元素都會(huì)被轉(zhuǎn)換成 null 字符串值,可以很好的判斷:

JSON.stringify([1, '2', true, , null, undefined]) // '[1,"2",true,null,null,null]'
JSON.stringify([1, '2', true, , null, undefined]) === JSON.stringify([1, '2', true, , null, undefined]) // true

toStringjoin 方法較類似,他們會(huì)把這三種類型的值都轉(zhuǎn)換成空字符:

[1, '2', true, , null, undefined].join() // '1,2,true,,,'
[1, '2', true, , null, undefined].toString() // '1,2,true,,,'
[1, '2', true, , null, undefined].toString() === [1, '2', true, , null, undefined].join() // true

當(dāng)我們使用上面介紹的第一種循環(huán)數(shù)組元素的方法進(jìn)行比較時(shí),null和undefined只需要注意它們兩種類型的值是否相等:

null == undefined // true
null === undefined // false

使用嚴(yán)格相等比較的時(shí)候,這兩種類型不相等。

空元素

數(shù)組元素是空元素時(shí),使用循環(huán)方式處理,則會(huì)有一些不一樣,主要和數(shù)組的空元素的特點(diǎn)有關(guān):

  • 數(shù)組通過下標(biāo)讀取空元素時(shí),返回undefined。
  • 當(dāng)使用 for、whilefor-of、findfindIndex 等語法時(shí),空元素會(huì)返回 undefined 值;undefined值能被比較,所以這時(shí)候進(jìn)行數(shù)組元素比較時(shí),結(jié)果是正確的。
  • 當(dāng)使用數(shù)組實(shí)例方法循環(huán)如 forEach、map、every、somefilter 等方法時(shí),空元素會(huì)被跳過;由于值被跳過,在使用這些方式進(jìn)行數(shù)組元素比較時(shí),結(jié)果可能是錯(cuò)誤的。
const arr1 = [1, 2, , 3], arr2 = [1, 2, 2, 3]
arr1.length === arr2.length && arr1.every((v, i) => v === arr2[i]) // true
arr1.length === arr2.length && arr1.filter((v, i) => v !== arr2[i]).length === 0 // true
arr1.length === arr2.length && !!arr1.find((v, i) => v !== arr2[i]) // false
arr1.length === arr2.length && arr1.findIndex((v, i) => v !== arr2[i]) === -1 // false

以上代碼,數(shù)組arr1有一個(gè)空元素,與數(shù)組arr2的元素并不相同,但是我們使用 everyfilter 比較得到的值為 true,這顯然是不對(duì)的;而使用 findfindIndex 比較結(jié)果為 false ,是正確的。

總結(jié)

以上四類數(shù)組比較的方式,依據(jù)我測(cè)試的結(jié)果,速度上,循環(huán)方式中的 for 語法是最快的,而且該方式還能正確比較空元素、null、undefined三種特殊情況,綜合上看使用for循環(huán)是最佳選擇。

第一種循環(huán)類方式,性能表現(xiàn)整體優(yōu)于另外三種方式。
join方法比toString方法更耗時(shí)。
如果數(shù)據(jù)量不是很大,這幾種方式耗時(shí)可能都在0.1ms以內(nèi),幾乎可以忽略。

最后,我們總結(jié)下以上內(nèi)容,主要介紹了四種能夠比較常規(guī)數(shù)組(數(shù)組為原始數(shù)據(jù)類型)是否相等的四種方式。也介紹了當(dāng)數(shù)組元素是另外三種特殊情況(空元素、null、undefined)時(shí),上面介紹的四種比較方式是否有效。當(dāng)然,如果數(shù)組元素是復(fù)雜數(shù)據(jù)類型如Object、Function等則比較無意義,不在本文討論范圍內(nèi)。文章來源地址http://www.zghlxwxcb.cn/news/detail-790120.html

到了這里,關(guān)于JavaScript數(shù)組(四):判斷數(shù)組相等的4種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaScript判斷數(shù)組對(duì)象是否含有某個(gè)值的方法(6種)

    JavaScript判斷數(shù)組對(duì)象是否含有某個(gè)值的方法(6種)

    文章內(nèi)容 文章鏈接 vue3 antd table表格的增刪改查(一) input輸入框根據(jù)搜索【后臺(tái)管理系統(tǒng)純前端filter過濾】 https://blog.csdn.net/XSL_HR/article/details/128072584?spm=1001.2014.3001.5501 vue3 antd table表格的增刪改查(二) input輸入框根據(jù)搜索【后臺(tái)管理系統(tǒng) 請(qǐng)求后端接口 前后端

    2024年02月06日
    瀏覽(28)
  • JavaScript:js數(shù)組/對(duì)象遍歷方法

    一、js遍歷方法 序號(hào) 方法 描述 1 for 使用最基本的for循環(huán)可以遍歷數(shù)組 2 for of for...of語句用來遍歷可迭代對(duì)象(包括數(shù)組、Set、Map、字符串等),它可以替代傳統(tǒng)的for循環(huán)和forEach()方法。for...of循環(huán)每次迭代都將返回一個(gè)值,而不是索引。 3 for in for...in語句用來遍歷對(duì)象的可

    2024年02月09日
    瀏覽(28)
  • javascript設(shè)置數(shù)組對(duì)象中的key值方法

    方法一:保留舊數(shù)組 key 和 value ; 方法二:不保留舊數(shù)組 key 和 value ; 1說明:使用map循環(huán),在map循環(huán)內(nèi)創(chuàng)建一個(gè)新對(duì)象,將item要改變的key賦給新創(chuàng)建的對(duì)象里面新key值,然后push給一個(gè)新創(chuàng)建的數(shù)組newArr即可; 2?使用forEach循環(huán) + for循環(huán),通過Object.keys()來改變屬性key;

    2024年02月16日
    瀏覽(20)
  • js 判斷兩個(gè)字符串是否相等(有兩種方法)

    使用比較運(yùn)算符判斷兩個(gè)字符串是否相等 可以使用比較運(yùn)算符 === 或 == 來判斷兩個(gè)字符串是否相等。例如: 在上述代碼中,我們定義了兩個(gè)字符串變量 str1 和 str2 ,并使用 === 運(yùn)算符來比較它們的值。如果兩個(gè)字符串相等,則輸出 兩個(gè)字符串相等 ;否則輸出 兩個(gè)字符串不相

    2024年02月05日
    瀏覽(108)
  • 小程序this.setData修改對(duì)象、數(shù)組中的值

    在微信小程序的前端開發(fā)中,使用this.setData方法修改data中的值,其格式為 this.setData({ ‘參數(shù)名1’: 值1,‘參數(shù)名2’: 值2)} 注意:如果是簡(jiǎn)單變量,參數(shù)名可以不加引號(hào)。 下面提供2種方式對(duì)data中的對(duì)象、數(shù)組中的數(shù)據(jù)進(jìn)行修改: 假設(shè)原數(shù)據(jù)為: 方式一:使用[‘字符串’]

    2024年04月25日
    瀏覽(26)
  • 微信小程序this.setData修改對(duì)象、數(shù)組中的值

    在微信小程序的[前端開發(fā)]中,使用this.setData方法修改data中的值,其格式為: 需要注意的是,如果是簡(jiǎn)單變量,這里的參數(shù)名可以不加引號(hào)。 經(jīng)過測(cè)試,可以使用3種方式對(duì)data中的對(duì)象、數(shù)組中的數(shù)據(jù)進(jìn)行修改。 假設(shè)原數(shù)據(jù)為: 方式一: 使用字符串,例如: 方式二: 構(gòu)造

    2024年02月10日
    瀏覽(20)
  • [開發(fā)|java] java 比較兩個(gè)對(duì)象的指定屬性的值是否相等

    Java中比較兩個(gè)對(duì)象的指定屬性的值是否相等,可以使用Apache Commons Lang庫中的EqualsBuilder類。EqualsBuilder提供了一種便捷的方法來比較兩個(gè)對(duì)象的屬性值是否相等,具體步驟如下: 通過構(gòu)造器創(chuàng)建一個(gè)EqualsBuilder對(duì)象。 調(diào)用EqualsBuilder對(duì)象的append方法,傳入需要比較的兩個(gè)對(duì)象以

    2024年02月16日
    瀏覽(81)
  • 判斷兩個(gè)數(shù)組是否相等

    在判斷兩個(gè)數(shù)組是否相等之前,我們應(yīng)該弄清楚數(shù)組怎樣才算相等,官方給的解釋是這樣的: Returns true if the two specified arrays of ints are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. In other

    2024年02月15日
    瀏覽(89)
  • JS判斷對(duì)象、數(shù)組是否包含某個(gè)屬性、某個(gè)值

    可以使用以下幾種方法來判斷對(duì)象是否包含某個(gè)屬性: 1. in 操作符: 使用 in 操作符可以檢查對(duì)象是否包含指定的屬性。它會(huì)檢查對(duì)象及其原型鏈上的所有屬性。 2. hasOwnProperty() 方法: hasOwnProperty() 是對(duì)象的內(nèi)置方法,用于檢查對(duì)象自身是否具有指定的屬性(不包括原型鏈上

    2024年02月09日
    瀏覽(96)
  • 判斷兩個(gè)vector數(shù)組是否相等

    判斷兩個(gè)vector數(shù)組是否相等是可以直接使用==或者!=的 因?yàn)関ector內(nèi)部都進(jìn)行了相關(guān)運(yùn)算符的重載,還可以進(jìn)行比較大小 下面這道簡(jiǎn)單搜索題就用到了這個(gè)性質(zhì),淺看一下吧 【問題描述】給定一個(gè)n個(gè)整數(shù)的集合X={x1,x2,…xn}(X中可能包含重復(fù)元素)和整數(shù)y,找出和等于y的X的子集

    2024年02月12日
    瀏覽(84)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包