簡體   English   中英

CodeWars Javascript 挑戰:它們是否“相同”?

[英]CodeWars Javascript Challenge: Are they the “same”?

卡塔: 鏈接

我的解決方案:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2) && array1.length && array2.length) {
        result = true;
        const squares = array2.map(e => Math.sqrt(e));
        squares.forEach((e) => {
            if (array1.includes(e)) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

我不想要另一個解決方案。 我想弄清楚為什么我的沒有通過所有的測試。 (兩次測試失敗,但我看不到哪個)

我懷疑如果 arrays 都是[] ,則測試期望為true 但 Kata 的描述另有說明:

如果 a 或 b 為 nil(或 null 或 None),則問題沒有意義,因此返回 false。

幫助將不勝感激。


工作解決方案基於答案:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2)) {
        result = true;
        const sortedArray1 = array1.sort((a, b) => a - b);
        const squares = array2.map(e => Math.sqrt(e)).sort((a, b) => a - b);
        squares.forEach((e, i) => {
            if (sortedArray1[i] === e) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

好的,一些作弊解決方法,但您的代碼在這里失敗: 在此處輸入圖像描述 這就是為什么在刪除兩個.length之后你又通過了一個測試。

下一個是在此處輸入圖像描述 .sqrt array2 之后你得到2, 3, 3這就是你返回 true 的原因,但它是 false。 這個答案足以幫助你解決這個 kata。

順便提一句。

如果 arrays 都是 [],我懷疑測試結果為真。 但 Kata 的描述另有說明:

卡塔簡介:

a 或 b 可能是 [](除 R、Shell 之外的所有語言)。 : - D

PS 我知道有些人檢查 arguments 可能被視為作弊,我只是為了教育目的而這樣做。 黑匣子並不總是足以找出問題所在。

如果有多個相同的數字,但這里和那里的計數不同,它將在您的代碼中返回 true,因為它includes在 arrays 中。 您應該對其進行排序並按索引迭代以進行比較,以確保數組中的每個項目僅使用一次。

這對我有用:

function comp(array1, array2){
  if(!array1 || !array2) return false;
  array1 = array1.map(t => t**2).sort((a,b)=>a-b);
  array2 = array2.sort((a,b)=>a-b);

  for(let i=0;i<array1.length;i++){if(array1[i] !== array2[i])return false}
  return true;
}

確保你能理解這個想法,並在你現有的代碼中做一些調整

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM