Javascript 频率计数器未定义/2的功率不相等

Javascript 频率计数器未定义/2的功率不相等,javascript,Javascript,因此,问题在于两个阵列: [1,2,2,4]; [1,4,4,16]; 检查第一个数组中的项在第二个数组中是否有重复项 const counterNumber = (arr1,arr2) => { if(arr1.length !== arr2.length) return false let counter1 = {} let counter2 = {} for (let val of arr1){ counter1[val] = (

因此,问题在于两个阵列:

[1,2,2,4];
[1,4,4,16];
检查第一个数组中的项在第二个数组中是否有重复项

const counterNumber = (arr1,arr2) => {
    if(arr1.length !== arr2.length) return false

    let counter1 = {}
    let counter2 = {}

    for (let val of arr1){
        counter1[val] = ( counter1[val] || 0 )+ 1
    }

    for (let val of arr2){
         counter2[val] = ( counter2[val] || 0 )+ 1
    }

    for(let key in counter1){
        if(!(key ** 2 in counter2)) return false     
        if(counter2[key ** 2] !== counter1[key]) return false
    }

    return true
}
现在这是工作,但我不明白这一行

if(counter2[key ** 2] !== counter1[key]) return false
这怎么不会是假的?第一个数组有1,2,2,4,第二个数组有1,4,4,16

对于第一个数组,将值存储在一个对象中后,该对象将具有键1、2、3。 在for-In循环中

counter2[key **2] is  counter[1 ** 2] / counter[1]  // counter1[1] 
counter2[key ** 2] is counter[ 2 ** 2] / counter[4] // counter1[2]
counte2[key ** 3] is counter{ 3 ** 2] / counter[9]  // counter1[3]


these are not === so therefore it should return false but instead if i console.log it gives me undefined and the return true appears.

在最后一个for循环之前

柜台1是

常数计数器1={ 1: 1, 2: 2, 4: 1 } 柜台2是

常数计数器2={ 1: 1, 4: 2, 16: 1 } 下面是一个基于arr1中的值描述不同变量的表

下一行检查两个数组中值的频率

ifcounter2[键**2]!==计数器1[键]返回false 如果您查看表格,它将比较第4行和第5行

代码可以像这样进行重构以变得更清晰

常量计数器编号=arr1,arr2=>{ ifarr1.length!==arr2.length返回false 设计数器1={} 设计数器2={} 对于arr1的let val{ 计数器1[val]=计数器1[val]| | 0+1 } 对于arr2的let val{ 计数器2[val]=计数器2[val]| | 0+1 } 计数器1中的forlet键{ 如果!hasMatchingSquareNumberkey,计数器2返回false 如果!hasMatchingSquareNumberCountkey、计数器1、计数器2返回false } 返回真值 } 常量hasMatchingSquareNumber=值,计数器2=>{ const valueToSquare=值**2; 返回值到计数器2中的方形; } const hasMatchingSquareNumberCount=值,计数器1,计数器2=>{ const valueToSquare=值**2; 返回计数器2[valueToSquare]==counter1[value]; }
您可以将代码片段化并添加它们不是的东西吗===因此它应该返回false,但是如果i console.log它给我undefined,则返回true。是什么意思?现在我意识到我把计数器2中的键和值搞混了谢谢!
+----+----------------+---+---+---+
| #1 | value in arr1  | 1 | 2 | 4 |
+----+----------------+---+---+---+
| #2 | counter1 key   | 1 | 2 | 4 |
+----+----------------+---+---+---+
| #3 | counter2 key   | 1 | 4 |16 |
+----+----------------+---+---+---+
| #4 | counter1 value | 1 | 2 | 1 |
+----+----------------+---+---+---+
| #5 | counter2 value | 1 | 2 | 1 |
+----+----------------+---+---+---+