写一个方法,判断给定的几个数字是否相等,如[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:
-
areNumbersEqual(numbers)(Basic Version):- Takes an array
numbersas 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
falseif any element is different fromfirstNumber. - Returns
trueif all elements are the same. This version considersNaN === NaNto be true, which is different from the strict equality check.
- Takes an array
-
areNumbersEqualRobust(numbers)(Robust Version):- This version adds checks for various input types and handles
NaNmore strictly (according to the standard JavaScript behavior whereNaN !== NaN). - Checks if the input
numbersis an array and if it's empty. - Checks if each element in the array is of type 'number'. If not, it returns
false. - Handles
NaNspecifically: if any element isNaN, it checks if all elements areNaNusingnumbers.every(Number.isNaN). This ensures that the function returnstrueonly if all elements areNaN, andfalseotherwise (e.g.,[NaN, 1]would returnfalse).
- This version adds checks for various input types and handles
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.
浙公网安备 33010602011771号