写一个方法,判断给定的几个数字是否相等,如[1,1,1,1]相等

function areNumbersEqual(numbers) {
  if (!numbers || numbers.length === 0) {
    return true; // Empty array considered equal
  }

  const firstNumber = numbers[0];

  for (let i = 1; i < numbers.length; i++) {
    if (numbers[i] !== firstNumber) {
      return false;
    }
  }

  return true;
}


// Examples
console.log(areNumbersEqual([1, 1, 1, 1])); // true
console.log(areNumbersEqual([1, 2, 3, 4])); // false
console.log(areNumbersEqual([])); // true (empty array)
console.log(areNumbersEqual([1])); // true (single element array)
console.log(areNumbersEqual([NaN, NaN])); // true (Handles NaN correctly)


// More robust version (handles various input types and NaN more strictly)
function areNumbersEqualRobust(numbers) {
  if (!Array.isArray(numbers) || numbers.length === 0) {
    return true;
  }

  const firstNumber = numbers[0];

  for (let i = 1; i < numbers.length; i++) {
    if (typeof numbers[i] !== 'number' || typeof firstNumber !== 'number') {
       return false; // Return false if any element is not a number
    }
    if (Number.isNaN(numbers[i]) || Number.isNaN(firstNumber)) {
        return numbers.every(Number.isNaN); // Return true only if all elements are NaN
    }
    if (numbers[i] !== firstNumber) {
      return false;
    }
  }

  return true;
}



// Examples (robust version)
console.log(areNumbersEqualRobust([1, 1, 1, 1])); // true
console.log(areNumbersEqualRobust([1, 2, 3, 4])); // false
console.log(areNumbersEqualRobust([])); // true
console.log(areNumbersEqualRobust([1])); // true
console.log(areNumbersEqualRobust([NaN, NaN])); // true
console.log(areNumbersEqualRobust([NaN, 1])); // false
console.log(areNumbersEqualRobust([1, "a"])); // false



Explanation:

  1. areNumbersEqual(numbers) (Basic Version):

    • Takes an array numbers as input.
    • Handles empty or null arrays by returning true.
    • Stores the first element of the array in firstNumber.
    • Iterates through the rest of the array, comparing each element to firstNumber.
    • Returns false if any element is different from firstNumber.
    • Returns true if all elements are the same. This version considers NaN === NaN to be true, which is different from the strict equality check.
  2. areNumbersEqualRobust(numbers) (Robust Version):

    • This version adds checks for various input types and handles NaN more strictly (according to the standard JavaScript behavior where NaN !== NaN).
    • Checks if the input numbers is an array and if it's empty.
    • Checks if each element in the array is of type 'number'. If not, it returns false.
    • Handles NaN specifically: if any element is NaN, it checks if all elements are NaN using numbers.every(Number.isNaN). This ensures that the function returns true only if all elements are NaN, and false otherwise (e.g., [NaN, 1] would return false).

The robust version is generally recommended as it handles edge cases and unexpected inputs more effectively. Choose the version that best suits your specific needs and assumptions about the input data.

posted @ 2024-12-12 09:14  王铁柱6  阅读(17)  评论(0)    收藏  举报