最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Js判斷兩個數(shù)組是否相等的幾種常見場景

 更新時間:2024年07月09日 10:38:00   作者:英子的搬磚日志  
無論是在開發(fā)中還是面試時,在js中判斷變量是否相等,都是一個比較常見的問題,這篇文章主要給大家介紹了關(guān)于Js判斷兩個數(shù)組是否相等的幾種常見場景,需要的朋友可以參考下

前言

日常開發(fā),時不時會遇到需要判定2個數(shù)組是否相等的情況,需要實現(xiàn)考慮的場景有:

  • 先判斷長度,長度不等必然不等
  • 元素位置
  • 其他情況考慮
    • '1' 和 1 (Object的key是字符串, Map的key沒有限制)
    • NaN
    • null 和 undefined

1、通過數(shù)組自帶方法比較

// 方式1
function isArrEqual1(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return arr1.every((v, i) => v === arr2[i]);
  // return !arr1.some((v, i) => v !== arr2[i]);
  // return arr1.filter((v, i) => v !== arr2[i]).length === 0;
  // return arr1.findIndex((v, i) => v !== arr2[i]) === -1;
}

// 測試
const arr1 = [-2, "-1", 0, 0.1, 1, "2", "a", "", undefined, null],
  arr2 = [-2, "-1", 0, 0.1, 1, "2", "a", "", undefined, null];

isArrEqual1(arr1, arr2); // true

數(shù)組自帶的方法,比較適合的有:every、some、filter、findIndex。

這種方式嚴格限制了數(shù)組元素長度、類型、位置必須一致。

注意包含NaN也無法比較!NaN是JS中唯一一個與自身不相等的存在!判斷NaN是否屬于同一個值得用Object.is(),如:Object.is(NaN, NaN); // true

2、通過循環(huán)判斷

// 方式2
function isArrEqual2(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (let i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) {
      return false;
    }
  }
  return true;
}

這種判定方法限制及說明同上述方法1。

3、toString()

// 方式3
function isArrEqual3(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return arr1.toString() === arr2.toString();
}

// 測試
isArrEqual3(arr1, arr2); // true

const arr3 = ['', 1, null, undefined, {}, { a: 1 }, NaN, [], [2, 3], new Date()],
  arr4 = ['', "1", undefined, null, {}, { a: 2 }, NaN, [], [2, "3"], new Date()];

isArrEqual3(arr3, arr4); // true

toString 方法是Object類型對象的實例方法,作用是返回一個對象的字符串形式。

這種方式限制了數(shù)組長度和元素位置,但是會發(fā)現(xiàn)有些元素類型沒有嚴格限制,這是由于js本身進行的數(shù)據(jù)隱式轉(zhuǎn)換!

在控制臺查看通過toString轉(zhuǎn)化后的數(shù)組,得到的結(jié)果如下:

此外,對數(shù)組、空數(shù)組、對象、空對象等引用類型,由于toString轉(zhuǎn)換結(jié)果都是[object Object],所以在比較的時候都會判定為相等!

還有,需要注意:

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

4、join()

// 方式4
function isArrEqual4(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return arr1.join() === arr2.join();
}

join 方法是數(shù)組的一個實例方法,如果join這個方法如果不傳如分割符,其實作用幾乎和toString一樣,所以實現(xiàn)效果和限制同toString。

5、JSON.stringify()

// 方式5 [推薦]
function isArrEqual5(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return JSON.stringify(arr1) === JSON.stringify(arr2);
}

// 測試
isArrEqual5(arr1, arr2); // true
isArrEqual5(arr3, arr4); // false

const arr5 = [undefined, null, "", {}, { a: 1 }, NaN, [], [2, 3], new Date()],
  arr6 = [undefined, null, "", {}, { a: 1 }, NaN, [], [2, 3], new Date()];

isArrEqual5(arr5, arr6); // true

JSON.stringify 用于將一個對象或值轉(zhuǎn)換成JSON字符串,轉(zhuǎn)換后結(jié)果會帶雙引號。

從測試結(jié)果可以看到,這個比較方式也嚴格的限制了數(shù)組長度、元素位置和元素類型,在日常中比較推薦此種方案~

總結(jié)

到此這篇關(guān)于Js判斷兩個數(shù)組是否相等的幾種常見場景的文章就介紹到這了,更多相關(guān)Js判斷兩個數(shù)組相等內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • layer彈出層中H5播放器全屏出錯的解決方法

    layer彈出層中H5播放器全屏出錯的解決方法

    本文主要介紹了layer彈出層中H5播放器全屏出錯解決&屬性poster底圖占滿video的方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Javascript實現(xiàn)Array和String互轉(zhuǎn)換的方法

    Javascript實現(xiàn)Array和String互轉(zhuǎn)換的方法

    這篇文章主要介紹了Javascript實現(xiàn)Array和String互轉(zhuǎn)換的方法,涉及JavaScript中toString方法與split方法的使用技巧,需要的朋友可以參考下
    2015-12-12
  • 分享十八個殺手級JavaScript單行代碼

    分享十八個殺手級JavaScript單行代碼

    這篇文章主要給大家分享了十八個殺手級JavaScript單行代碼,這些單行代碼可以幫助你提高工作效率并可以幫助調(diào)試代碼,對大家學習或者使用JavaScript具有一定的參考學習價值,需要的朋友可以參考下
    2021-10-10
  • js實現(xiàn)點擊切換checkbox背景圖片的簡單實例

    js實現(xiàn)點擊切換checkbox背景圖片的簡單實例

    下面小編就為大家?guī)硪黄猨s實現(xiàn)點擊切換checkbox背景圖片的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 微信小程序使用swiper組件實現(xiàn)類3D輪播圖

    微信小程序使用swiper組件實現(xiàn)類3D輪播圖

    在寫微信小程序時,有寫到實現(xiàn)3D輪播圖的效果,可以直接使用微信小程序中自帶的組件swiper來實現(xiàn)。下面通過實例代碼給大家介紹微信小程序輪播圖的實現(xiàn)方法,感興趣的朋友一起看看吧
    2018-08-08
  • JS設計模式之命令模式的用法詳解

    JS設計模式之命令模式的用法詳解

    JavaScript中的命令模式是一種設計模式,它提供了一種將命令封裝為對象的方式,從而允許我們將請求與實際執(zhí)行該請求的操作對象解耦,這種模式可以在不同的場景中使用,例如實現(xiàn)撤銷/重做操作、隊列任務等,本文我們將講解命令設計模式在JS中的使用
    2023-08-08
  • uni-app中Navigator組件的用法詳解及傳參方式

    uni-app中Navigator組件的用法詳解及傳參方式

    這篇文章主要給大家介紹了關(guān)于uni-app中Navigator組件的用法詳解及傳參方式的相關(guān)資料,在實際應用開發(fā)中我們經(jīng)常要使用到路由跳轉(zhuǎn),在uniapp官網(wǎng)中提供了navigator內(nèi)置組件,供我們使用,需要的朋友可以參考下
    2023-09-09
  • JS Object構(gòu)造函數(shù)之Object.freeze

    JS Object構(gòu)造函數(shù)之Object.freeze

    這篇文章主要介紹了JS Object構(gòu)造函數(shù)之Object.freeze,對JS感興趣的同學,可以深入了解下
    2021-04-04
  • 清除瀏覽器緩存的幾種方法總結(jié)(必看)

    清除瀏覽器緩存的幾種方法總結(jié)(必看)

    下面小編就為大家?guī)硪黄宄秊g覽器緩存的幾種方法總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 微信小程序中slot插槽基本使用方法實例

    微信小程序中slot插槽基本使用方法實例

    之前竟然聽到有人跟我說微信小程序沒有組件插槽功能,下面這篇文章主要給大家介紹了關(guān)于微信小程序中slot插槽基本使用方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11

最新評論

安塞县| 大化| 望江县| 塔河县| 井陉县| 平南县| 水城县| 大方县| 白山市| 武鸣县| 镇宁| 上高县| 富裕县| 合江县| 桓仁| 新泰市| 芦溪县| 黄浦区| 武夷山市| 阳曲县| 巨野县| 京山县| 揭阳市| 汝城县| 肥城市| 克什克腾旗| 仙居县| 瓦房店市| 连城县| 宝应县| 抚顺县| 犍为县| 滨海县| 绿春县| 衡东县| 怀柔区| 平凉市| 云霄县| 汉川市| 班戈县| 萍乡市|