使用JavaScript验证第二个数组中的值是否对应于第一个数组的平方值的函数

时间:2019-07-18 21:02:20

标签: javascript arrays for-loop if-statement compare

我对if-else语句有疑问,并且拼接似乎无法正常工作。

function same(arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;
    }
    for (let i = 0; i < arr1.length; i++) {
        for (let j = 0; j < arr2.length; j++) {
            let correctIndex = arr1[i] * 2;
            if (correctIndex !== arr2[j]) {
                return false;
            }
        }
        console.log(arr2);
        arr2.splice(correctIndex, 1)
    }
    return true;
}

same([1, 2, 3, 2], [9, 1, 4, 4]);

2 个答案:

答案 0 :(得分:1)

尝试一下:

const sortNumber = numArray => numArray.sort((a, b) => a - b);

const same = (_arr1, _arr2) => { 
    const arr2 = sortNumber(_arr2);
    return sortNumber(_arr1).every((res,i)=>arr2[i]===res**2);
}

console.log(same([1, 2, 3, 2], [9, 1, 4, 4]))

答案 1 :(得分:-1)

您需要遍历第一个数组,并引用第二个数组中的相应索引。一旦找到不是正方形的条目,就可以返回false。

function same(arr1, arr2){
  if(arr1.length !== arr2.length) return false;

  arr1.sort();
  arr2.sort();

  // visit each item in arr1 exactly once
  for(let i=0; i<arr1.length; i++){
    // if entry at arr2 isn't the square of that entry in arr1, return false immediately
    if(arr1[i] * arr1[i] !== arr2[i]) return false;
  }

  // we've checked each item, return true
  return true;
}

这里不需要使用splice(),因为您只需要返回true或false,而无需修改任何一个数组。另外,您无需使用嵌套的for循环,因为您可以直接访问每个数组。