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

给定两个数组 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。



qq_笑_17
浏览 203回答 4
4回答

慕娘9325324

使用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.

哆啦的时光机

您可以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]));

BIG阳

您的代码几乎适用于测试用例。您只需在内部交换数组: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]));// -> trueconsole.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]));// -> falseconsole.log(comp2([2,4], [4,16, 536]));// -> false游乐场:https ://jsfiddle.net/alotropico/9ukmL5g3/13/

茅侃侃

使用 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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript