4 回答

TA贡献1783条经验 获得超5个赞
使用everyand includes,这可以用一个简单的单线写成:
const a = [121, 144, 19, 161, 19, 144, 19, 11]
const b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
const comp = (a, b) => a.length === b.length && a.every(value => b.includes(value ** 2))
console.log(comp(a, b))
非常明确,此函数检查两个数组是否具有相同的长度,以及asquared 的每个值是否都包含在b.

TA贡献1859条经验 获得超6个赞
您的代码几乎适用于测试用例。您只需在内部交换数组:
function comp(array1, array2){
return array1.every((item)=>{
let a = array2.indexOf((item ** 2));
if(a >=0){
return true;
} else{
return false;
}
})
}
虽然如果我理解正确,即使数组具有不同的长度,或者如果第二个数组的元素不是第一个元素的多重性,只要第一个在第二个中具有一些多重性,这将返回 true:
console.log(comp([2,4,4,2], [4,16]));
// -> true
console.log(comp([2,4], [4,16, 536]));
// -> true
因此,要忠实于前提,避免 indexOf 或包括:
function comp2(A, B){
if(A.length != B.lengt) return false;
A.sort((a, b) => a-b);
B.sort((a, b) => a-b);
return A.every((a, i)=>{
const b = B[i];
if(a ** 2 == b){
return true;
} else{
return false;
}
})
}
console.log(comp2([2,4,4,2], [4,16]));
// -> false
console.log(comp2([2,4], [4,16, 536]));
// -> false
游乐场:https ://jsfiddle.net/alotropico/9ukmL5g3/13/

TA贡献1842条经验 获得超22个赞
使用 every 和 a set 删除重复项
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
function compare(a,b){
a=[...new Set(a)]
b=new Set(b)
return a.every(x=>b.has(x*x))
}
console.log(compare(a,b))
添加回答
举报