为了账号安全,请及时绑定邮箱和手机立即绑定

如何查看一个数组中的每个数字是否在另一个数组中找到平方?

如何查看一个数组中的每个数字是否在另一个数组中找到平方?

qq_笑_17 2022-10-27 16:07:48
给定两个数组 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)返回真,因为在 b 中,121 是 11 的平方,14641 是 121 的平方,20736 是 144 的平方,361 是 19 的平方,25921 是 161 的平方,依此类推。首先,我只想检查每个项目并测试平方版本是否存在于另一个数组中。这是我的代码:function comp(array1, array2){  return array2.every((item)=>{    let a = array1.indexOf((item ** 2));    if(a >=0){      return true;    } else{      return false;    }  })}console.log(comp([121, 144, 19, 161, 19, 144, 19, 11], [121, 14641, 20736, 361, 25921, 361, 20736, 361]));这个例子当然应该返回 true。我的代码看起来很基本,所以我不确定为什么它不起作用。此外,如果我为第二个数组放置一个空数组,它会返回 false。
查看完整描述

4 回答

?
慕娘9325324

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.


查看完整回答
反对 回复 2022-10-27
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可以Set检查array2并检查每个产品array1

function comp(array1, array2) {

    const set2 = new Set(array2);

    return array1.every(v => set2.has(v * v));

}


console.log(comp([121, 144, 19, 161, 19, 144, 19, 11], [121, 14641, 20736, 361, 25921, 361, 20736, 361]));



查看完整回答
反对 回复 2022-10-27
?
BIG阳

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/


查看完整回答
反对 回复 2022-10-27
?
茅侃侃

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))


查看完整回答
反对 回复 2022-10-27
  • 4 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号