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

記錄--如何判斷兩個(gè)數(shù)組的內(nèi)容是否相等

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

這里給大家分享我在網(wǎng)上總結(jié)出來(lái)的一些知識(shí),希望對(duì)大家有所幫助

記錄--如何判斷兩個(gè)數(shù)組的內(nèi)容是否相等

題目

給定兩個(gè)數(shù)組,判斷兩數(shù)組內(nèi)容是否相等。

  • 不使用排序
  • 不考慮元素位置

例:

[1, 2, 3] 和 [1, 3, 2] // true
[1, 2, 3] 和 [1, 2, 4] // false

思考幾秒:有了????

1. 直接遍歷?

  • 直接遍歷第一個(gè)數(shù)組,并判斷是否存在于在第二個(gè)數(shù)組中
  • 求差集, 如果差集數(shù)組有長(zhǎng)度,也說(shuō)明兩數(shù)組不等(個(gè)人感覺比上面的麻煩就不舉例了)
const arr1 =  ["apple", "banana", 1]
const arr2 =  ["apple", 1, "banana"]

function fn(arr1, arr2) {
  // Arrary.some: 有一項(xiàng)不滿足 返回false
  // Arrary.indexOf: 查到返回下標(biāo),查不到返回 -1
  if (arr1.length !== arr2.length) {
    return false;
  }
  return !arr1.some(item => arr2.indexOf(item)===-1)
}

fn(arr1,arr2) // true
  • 細(xì)心的小伙伴就會(huì)發(fā)現(xiàn):NaN 會(huì)有問(wèn)題
const arr1 =  ["apple", "banana", NaN]
const arr2 =  ["apple", NaN, "banana"]

function fn(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return !arr1.some(item => arr2.indexOf(item)===-1)
}

fn(arr1,arr2) // false

Arrary.prototype.indexOf() 是使用的嚴(yán)格相等算法 => NaN值永遠(yuǎn)不相等

Array.prototype.includes() 是使用的零值相等算法 => NaN值視作相等

  • 嚴(yán)格相等算法: 與 === 運(yùn)算符使用的算法相同
  • 零值相等不作為 JavaScript API 公開, -0和0 視作相等,NaN值視作相等,具體參考mdn文檔:

記錄--如何判斷兩個(gè)數(shù)組的內(nèi)容是否相等

  • 使用includes
const arr1 =  ["apple", "banana", NaN]
const arr2 =  ["apple", NaN, "banana"]

function fn(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return !arr1.some(item => !arr2.includes(item))
}

fn(arr1,arr2) // true

使用includes 確實(shí)可以判斷NaN了,如果數(shù)組元素有重復(fù)呢?

// 重復(fù)的元素都是banana
const array1 = ["apple", "banana", "cherry", "banana"];
const array2 = ["banana", "apple", "banana", "cherry"];
// 或者
// 一個(gè)重復(fù)的元素是banana, 一個(gè)是apple
const array1 = ["apple", "banana", "cherry", "banana"];
const array2 = ["banana", "apple", "apple", "cherry"];

由上可知:這種行不通,接下來(lái)看看是否能從給數(shù)組元素添加標(biāo)識(shí)入手

2. 把重復(fù)元素標(biāo)識(shí)編號(hào)?

這個(gè)簡(jiǎn)單:數(shù)組 元素重復(fù) 轉(zhuǎn)換成val1, val2

function areArraysContentEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }

  // 重復(fù)數(shù)組元素 加1、2、3
  const countArr1 = updateArray(arr1)
  const countArr2 = updateArray(arr2)

  /**
   * 
   * @param {*} arr 數(shù)組 元素重復(fù) 轉(zhuǎn)換成val1, val2
   * @returns 
   */
  function updateArray(arr) {
    const countMap = new Map();
    const updatedArr = [];

    for (const item of arr) {
      if (!countMap.has(item)) {
        // 如果元素是第一次出現(xiàn),直接添加到結(jié)果數(shù)組
        countMap.set(item, 0);
        updatedArr.push(item);
      } else {
        // 如果元素已經(jīng)出現(xiàn)過(guò),添加帶有編號(hào)的新元素到結(jié)果數(shù)組
        const count = countMap.get(item) + 1;
        countMap.set(item, count);
        updatedArr.push(`${item}${count}`);
      }
    }
    return updatedArr;
  }
  const flag = countArr1.some(item => !countArr2.includes(item))
  return !flag
}

const array1 = ["apple", "banana", "cherry", "banana"];
const array2 = ["banana", "apple", "banana", "cherry"];

areArraysContentEqual(array1, array2) // true

// 其實(shí)這種存在漏洞的
const array3 = ["apple", "banana", "cherry", "banana", 1, '1', '1' ];
const array4 = ["banana", "apple", "banana", "cherry", '1', 1, 1];
// 應(yīng)該是false
areArraysContentEqual(array3, array4) // true

因?yàn)榘雅袛嗟?轉(zhuǎn)為了字符串 updatedArr.push(${item}${count}) 所以出問(wèn)題了

3. 統(tǒng)計(jì)元素次數(shù)(最終方案)?

function areArraysContentEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }

  // 創(chuàng)建計(jì)數(shù)對(duì)象,用于記錄每個(gè)元素在數(shù)組中的出現(xiàn)次數(shù)
  const countMap1 = count(arr1)
  const countMap2 = count(arr2)

  // 統(tǒng)計(jì)數(shù)組中的元素出現(xiàn)次數(shù)
  function count(arr = []) {
    const resMap = new Map();
    for (const item of arr) {
      resMap.set(item, (resMap.get(item) || 0) + 1);
    }
    return resMap
  }
  // 檢查計(jì)數(shù)對(duì)象是否相等
  for (const [key, count] of countMap1) {
    if (countMap2.get(key) !== count) {
      return false;
    }
  }

  return true;
}

const array1 = ["apple", "banana", "cherry", "banana", 1, '1', '11', 11];
const array2 = ["banana", "apple", "banana", "cherry", '1', 1, '11', 11];

areArraysContentEqual(array1, array2) // true

4. 評(píng)論區(qū)大佬方案(+1、-1)??

  1. 只需要一個(gè)對(duì)象
  2. 遍歷第一個(gè)數(shù)組就 +1
  3. 遍歷第二個(gè)數(shù)組就 - 1
  4. 最后遍歷對(duì)象,只要不是都是 0 就等于不匹配

這樣就不需要倆個(gè)對(duì)象了,而且第二個(gè)遍歷的時(shí)候如果找不到這個(gè)值的話也可以直接退出了

?
function areArraysContentEqual3(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }

  const countMap = new Map();

  // 計(jì)數(shù)第一個(gè)數(shù)組的元素
  for (const item of arr1) {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  }

  // 比較第二個(gè)數(shù)組與計(jì)數(shù)
  for (const item of arr2) {
    const val = countMap.get(item);
    if (val === undefined || val <= 0) {
      return false;
    }
    countMap.set(item, val - 1);
  }

  return true;
}

5. 評(píng)論區(qū)大佬方案(操作第二個(gè)數(shù)組)??

遍歷第一個(gè)數(shù)組,在第二個(gè)數(shù)組找到就刪除第二個(gè)數(shù)組中對(duì)應(yīng)的元素,沒有找到直接不等,最后再判斷一下第二個(gè)數(shù)組的長(zhǎng)度即可。實(shí)際使用中一般不直接操作原數(shù)組,淺復(fù)制一下就好

可能沒有前幾個(gè)性能好,但是想法還是很好的點(diǎn)贊~

function areArraysContentEqual2(arr1=[], arr2=[]) {
  arr2 = [...arr2]
  if (arr1.length !== arr2.length) {
    return false;
  }

  arr1.some(item => {
    // 找到元素在第二個(gè)數(shù)組中的位置
    const index = arr2.findIndex(item1 => {
      if (isNaN(item) && isNaN(item1)) {
        return true
      }
      return item ===item1
    })
    if (index !== -1 ) {
      arr2.splice(index, 1)
    }
  })
  return !arr2.length
}

注意事項(xiàng)

這個(gè)題需要注意:

  • 先判斷長(zhǎng)度,長(zhǎng)度不等 必然不等
  • 元素可重復(fù)
  • 邊界情況考慮
    • '1' 和 1 (Object的key是字符串, Map的key沒有限制)
    • NaN
    • null undefined

本文轉(zhuǎn)載于:

https://juejin.cn/post/7290786959441117243

如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。

?記錄--如何判斷兩個(gè)數(shù)組的內(nèi)容是否相等文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710882.html

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

本文來(lái)自互聯(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)文章

  • 在JS中如何判斷兩個(gè)對(duì)象是否相等

    在JavaScript中,判斷兩個(gè)對(duì)象是否相等有多種方法,取決于你對(duì) 相等 的定義以及對(duì)象屬性的類型。以下是幾種常見的方法: ? 1. 嚴(yán)格相等運(yùn)算符 (===) 使用 === 運(yùn)算符可以比較兩個(gè)對(duì)象是否引用同一個(gè)對(duì)象。如果兩個(gè)變量引用了同一個(gè)對(duì)象,則它們是相等的,否則它們是不相等

    2024年02月03日
    瀏覽(92)
  • Python字符串比較:如何判斷兩個(gè)字符串是否相等?

    Python字符串比較:如何判斷兩個(gè)字符串是否相等? 在Python編程中,字符串是最常用的數(shù)據(jù)類型之一。當(dāng)我們需要比較兩個(gè)字符串時(shí),通常需要判斷它們是否相等。這篇文章將詳細(xì)介紹Python中比較兩個(gè)字符串的方法。 使用“==”運(yùn)算符比較字符串 在Python中,可以使用“==”運(yùn)算

    2023年04月11日
    瀏覽(111)
  • java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等

    java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等 https://blog.51cto.com/u_12855/7333853 1、直接使用equals()比較 眾所周知,兩個(gè)列表具有完全相同的元素并且具有完全相同的順序時(shí),它們是相等的。因此, 如果我們業(yè)務(wù)要求兩個(gè)list順序一致,可以使用equals()方法進(jìn)行相等性檢查: 即使

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

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

    2024年02月05日
    瀏覽(108)
  • 【python基礎(chǔ)知識(shí)】python中怎么判斷兩個(gè)字符串是否相等

    【python基礎(chǔ)知識(shí)】python中怎么判斷兩個(gè)字符串是否相等

    目錄 有哪些判斷方法 1. == 運(yùn)算符 2. is 運(yùn)算符 有哪些特殊情況 1. 字符串中包含空格、換行符、制表符等特殊字符 2. 字符串編碼格式的不同 3. 字符串對(duì)象的創(chuàng)建方式不同 注意事項(xiàng) 1. 避免使用is運(yùn)算符進(jìn)行字符串比較 2. 注意空格、換行符、制表符等特殊字符的影響 3. 注意字符

    2024年02月08日
    瀏覽(112)
  • JavaScript判斷兩個(gè)數(shù)組相等的四類方法

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

    2024年02月09日
    瀏覽(96)
  • rust里如何判斷字符串是否相等呢?

    在 Rust 中,有幾種方法可以判斷字符串是否相等。下面是其中幾種常見的方法: 使用 == 運(yùn)算符:可以直接使用 == 運(yùn)算符比較兩個(gè)字符串是否相等。例如: 這段代碼會(huì)輸出 “字符串不相等”,因?yàn)?str1 和 str2 不是相同的字符串。 2. 使用 eq 方法:字符串類型實(shí)現(xiàn)了 PartialEq

    2024年02月14日
    瀏覽(129)
  • 【Java SE】判斷兩個(gè)文件內(nèi)容是否相同的多種方法

    逐字節(jié)比較文件內(nèi)容。這種方法適用于小文件,但對(duì)于大文件會(huì)比較耗時(shí)。 計(jì)算文件的哈希值(如 MD5、SHA-256 等),然后比較兩個(gè)文件的哈希值。如果哈希值相同,則可以認(rèn)為文件內(nèi)容相同。這種方法適用于大文件,因?yàn)橹恍枰容^哈希值而不是整個(gè)文件內(nèi)容。 通過(guò)使用

    2024年02月07日
    瀏覽(100)
  • 如何判斷兩個(gè)隨機(jī)變量是否獨(dú)立,同分布

    如何判斷兩個(gè)隨機(jī)變量是否獨(dú)立,同分布

    獨(dú)立兩個(gè)判斷條件 1,設(shè)(x,y)的密度函數(shù)為f(x,y),其定義域是矩形區(qū)域。聯(lián)合密度函數(shù)的區(qū)域必須為矩形區(qū)域,這很重要??梢宰C明一波,若x的范圍為(0,1),y的范圍為(3,5)如果他們相互獨(dú)立,那么組成的聯(lián)合密度函數(shù),每一個(gè)x,都可以對(duì)應(yīng)所有的y,所以組成的范圍為矩

    2024年02月11日
    瀏覽(93)
  • MATLAB-判斷兩矩陣是否相等

    相等的位置返回1,不相等則返回0 相等返回1,不相等返回0 注意:矩陣不可以包含NaN,因?yàn)檫@個(gè)函數(shù)中,NaN~=NaN。

    2024年02月06日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包