第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

對(duì)于兩個(gè)數(shù)組,查找僅存在于一個(gè)數(shù)組中的項(xiàng)目(對(duì)稱差異)

對(duì)于兩個(gè)數(shù)組,查找僅存在于一個(gè)數(shù)組中的項(xiàng)目(對(duì)稱差異)

白板的微信 2023-05-19 17:09:05
我需要比較兩個(gè)數(shù)組并返回一個(gè)新數(shù)組,其中包含僅在兩個(gè)給定數(shù)組之一中找到的任何項(xiàng)目,但不能同時(shí)在兩個(gè)數(shù)組中找到。換句話說,返回兩個(gè)數(shù)組的對(duì)稱差。我的算法包括在第一個(gè)數(shù)組上使用 map() 方法,并使用 every() 將該數(shù)組的每個(gè)元素與第二個(gè)數(shù)組的元素進(jìn)行比較。如果此方法返回 true,則該元素將在 map 的塊級(jí)別返回(最終會(huì)將其添加到返回的數(shù)組),否則將被丟棄。我不確定為什么我的代碼不起作用。這是使用我的代碼的錯(cuò)誤輸出示例:function diffArray(arr1, arr2) {    var newArr = arr1        .map(elem1 => {            if (arr2.every(elem2 => elem2 != elem1)) {                return elem1;            }        });    return newArr;}console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));這是錯(cuò)誤的輸出:[ undefined, undefined, undefined, undefined ]預(yù)期輸出是:[4]
查看完整描述

4 回答

?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

您的方法迭代第一個(gè)數(shù)組,并且由于使用map以及對(duì)值的檢查,您得到 undefined 的每個(gè)元素arr1。


如果您filter也使用另一個(gè)數(shù)組,您可以獲得想要的結(jié)果。


function diffArray(arr1, arr2) {

    return [

        ...arr1.filter(elem1 => arr2.every(elem2 => elem2 != elem1)),

        ...arr2.filter(elem1 => arr1.every(elem2 => elem2 != elem1))

    ];

}


console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));

另一種方法采用兩個(gè)數(shù)組的所有值組成的數(shù)組,并通過檢查該值是否不包含在兩個(gè)數(shù)組中來進(jìn)行過濾。


function diffArray(arr1, arr2) {

    return [...arr1, ...arr2].filter(v => arr1.includes(v) !== arr2.includes(v));

}


console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));


查看完整回答
反對(duì) 回復(fù) 2023-05-19
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

即使數(shù)字在兩個(gè)數(shù)組中多次出現(xiàn),該算法也能正常工作。


它使用從兩個(gè)數(shù)組的項(xiàng)目創(chuàng)建的 Map。該地圖包含該項(xiàng)目作為鍵,該值是它在第一個(gè)數(shù)組中找到的次數(shù) - 它在第二個(gè)數(shù)組中找到的次數(shù)。


創(chuàng)建 Map 后,它會(huì)轉(zhuǎn)換為 [item, count] 的數(shù)組。然后過濾數(shù)組,刪除所有計(jì)數(shù)為的項(xiàng)目0(它們?cè)趦蓚€(gè)數(shù)組中均等存在),然后我們將數(shù)組映射到項(xiàng)目數(shù)組。


const getCounts = (arr, init = new Map(), inc = 1) =>

  arr.reduce((acc, item) => acc.set(item, (acc.get(item) || 0) + inc), init);


function diffArray(arr1, arr2) {

  // create a Map that adds 1 for all items in arr1, and substructs 1 for every item in arr2

  const counts = getCounts(arr2, getCounts(arr1), -1);

  

  // convert to an array of pairs [item, count]

  return Array.from(counts)

    .filter(([, v]) => v) // remove all items with count 0

    .map(([k]) => k); // map to the original item

}


console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));

console.log(diffArray([1, 2, 3, 3, 5], [1, 2, 3, 4, 5]));

console.log(diffArray([5, 1, 2, 3, 5], [1, 2, 3, 4, 5, 5]));

console.log(diffArray([1, 1, 2, 2, 3, 3, 5], [1, 2, 2, 3, 4, 5]));


查看完整回答
反對(duì) 回復(fù) 2023-05-19
?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

您的函數(shù)返回第二個(gè)數(shù)組中不存在的第一個(gè)數(shù)組的元素。

.map()它的返回是通過返回與您的輸入 ( ) 大小完全相同的數(shù)組這一事實(shí)來解釋的arr1,但是由于所有項(xiàng)目都arr1存在于arr2您不輸入if(-statement 正文中,因此undefined被返回。

如果您的目的是返回僅存在于一個(gè)數(shù)組中的項(xiàng)目(無論它們傳入的順序如何),您可以將該Map對(duì)象與Array.prototype.reduce()

  • 將數(shù)組參數(shù)組合成普通的數(shù)組數(shù)組

  • 使用 循環(huán)遍歷這些內(nèi)部數(shù)組.reduce(),構(gòu)建Map,顯示每個(gè)項(xiàng)目在組合數(shù)組中出現(xiàn)的次數(shù)

  • 對(duì)于組合數(shù)組的每個(gè)項(xiàng)目,刪除重復(fù)項(xiàng)并增加相應(yīng)的計(jì)數(shù)器

  • 傳播結(jié)果Map.entries()那些.filter()找出獨(dú)特之處

const arr1 = [1, 2, 3, 5], 

      arr2 = [1, 2, 3, 4, 5],

      

      getUniques = (...arrays) => 

        [...arrays

          .reduce((acc, arr) => {

            [...new Set(arr)]

              .forEach(item => 

                acc.set(item, (acc.get(item)||0)+1))

            return acc

          }, new Map)

          .entries()]

          .reduce((acc, [item, repetitions]) => 

            (repetitions == 1 && acc.push(item), acc), [])

            

console.log(getUniques(arr1, arr2))

.as-console-wrapper {min-height:100%;}

上述方法具有 O(n) 時(shí)間復(fù)雜度,這與您最初的嘗試和您當(dāng)前接受的答案(均具有 O(n2) 時(shí)間復(fù)雜度)相反。因此,它可能在大型陣列上執(zhí)行得更快(任意數(shù)量的陣列,作為獎(jiǎng)勵(lì))。



查看完整回答
反對(duì) 回復(fù) 2023-05-19
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

使用 _.difference(array, [values])

來自lodash

或者

自己的解決方案:

const diffArray = (arrayA, arrayB) => {

    const output = []

    const setA = new Set(arrayA);

    arrayB.forEach((n) =>{

       if(!setA.has(n)){

         output.push(n)

       }

    })

    const setB = new Set(arrayB);

    arrayA.forEach(n =>{

       if(!setB.has(n)){

         output.push(n)

       }

    })

    return output;

}


console.log(diffArray([1, 2, 3, 5, 6], [1, 2, 3, 4, 5])); //4, 6


查看完整回答
反對(duì) 回復(fù) 2023-05-19
  • 4 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)