这里是完整的问题描述

给定两个数组a和b,编写一个函数comp(a,b)(在Clojure中为compSame(a,b)),该函数检查两个数组是否具有“相同”元素,并且具有相同的多重性。 “相同”在这里表示b中的元素是平方的元素,与顺序无关。

例子

有效数组

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]


comp(a, b)返回true,因为在b中:


121是11的平方
14641是121的平方,
20736 144的平方,
361 19平方,
25921的平方161,依此类推。


如果我们用平方写b的元素,这将变得显而易见:

无效的数组

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]


如果我们将第一个数字更改为其他数字,则comp可能不再返回true

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]


comp(a,b)返回false,因为在b中132不是任意数量的a的平方。

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]


comp(a,b)返回false,因为在b中,36100不是a的平方。

备注


ab可能是[](所有语言)。
ab可能是nilnullNone(在Haskell,Elixir,C ++,Rust中除外)。
如果abnil(或者为null或无),则该问题没有意义,因此返回false
如果ab为空,则结果是显而易见的。


注意事项


这两个数组具有相同的大小(> 0),这些大小在函数comp中作为参数给出。


我的问题:


  您能提出一个我不符合要求的测试用例吗
  规格?
  
  我被困在1个基本测试未通过上(预期
  结果:true,但是我的代码返回false)


我的密码尝试

function isTrue(el){
  return el === true;
}

function comp(array1, array2){
  if(array1.length === 0 || array2.length === 0){
    return false;
  }
  var arr = array1.map(function(num){return num*num});
  var arr2 = [];
  for(var i = 0; i < arr.length; i++){
    if(array2.includes(arr[i])){
      arr2.push(true);
      var a = array2.indexOf(arr[i]);
     array2.splice(a,1);
    } else{
      arr2.push(false);
    }
  }
  return arr2.includes(false) ? false : true;
}

最佳答案

最简单的方法:



const comp = (a1, a2) => {
  if (!a1 || !a2 || a1.length !== a2.length) return false;
  return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}

关于javascript - 他们是“一样的”吗? CodeWars,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45048414/

10-12 18:47