[英]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;
}
如果有多個相同的數字,但這里和那里的計數不同,它將在您的代碼中返回 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.