谁能指出一些代码来确定JavaScript中的数字是偶数还是奇数?
谁能指出一些代码来确定JavaScript中的数字是偶数还是奇数?
Answers:
使用以下代码:
function isOdd(num) { return num % 2;}
console.log("1 is " + isOdd(1));
console.log("2 is " + isOdd(2));
console.log("3 is " + isOdd(3));
console.log("4 is " + isOdd(4));
1代表奇数,0代表偶数。
0
或1
(或者,NaN
如果您输入的不是数字并且不能强制为1),则在大多数情况下都可以正常工作。但是,如果您想要一个真实的true
或false
:return (num % 2) == 1;
num
不是整数,这将返回分数。如果您进行比较,那仍然可以使用isOdd(1.5)==true
(因为分数不等于true
),但是如果函数返回true
或false
由名称“ isOdd”暗示,则更好。
return !!(num % 2)
取得布林
使用按位运算AND
符。
function oddOrEven(x) {
return ( x & 1 ) ? "odd" : "even";
}
function checkNumber(argNumber) {
document.getElementById("result").innerHTML = "Number " + argNumber + " is " + oddOrEven(argNumber);
}
checkNumber(17);
<div id="result" style="font-size:150%;text-shadow: 1px 1px 2px #CE5937;" ></div>
如果您不希望字符串返回值,而是布尔值,请使用以下命令:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y
!
function isEven(n){return !(n & 1);}
。
x & 1
检查是否在该数字中设置了最后一位(因为1是一个除最低有效位以外所有位均设置为1的数字):如果为,则数字为奇数,否则为偶数。
您可以执行以下操作:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }
只是的不必要的罗word版本answer = (bool) condition;
。减少您的功能function isEven(value) { return (bool) (value%2 == 0); }
,我们都会很高兴。
(bool)
(这将产生错误),并且在任何情况下都不需要:return value%2 == 0;
将执行此==
操作,因为运算符返回布尔值。
answer = !!(condition)
。当然,我要说的是,您可以return value%2==0
并且不需要打扰有条件的人。
value%2===0
通过按位,代码定位:
var isEven=n=>(n&1)?"odd":"even";
您可以传递一个简单的功能。使用模运算符%
:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
使用我的扩展名:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
然后
var a=5;
a.isEven();
==假
a.isOdd();
==真
如果不确定它是否为数字,请通过以下分支进行测试:
if(a.isOdd){
a.isOdd();
}
更新:
如果您不使用变量:
(5).isOdd()
刚刚在Adobe Dreamweaver中执行了此操作。我用if(isNaN(mynmb))
检查给定的值是否为数字,我还使用 Math.abs(mynmb%2)将负数转换为正数并计算
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body bgcolor = "#FFFFCC">
<h3 align ="center"> ODD OR EVEN </h3><table cellspacing = "2" cellpadding = "5" bgcolor="palegreen">
<form name = formtwo>
<td align = "center">
<center><BR />Enter a number:
<input type=text id="enter" name=enter maxlength="10" />
<input type=button name = b3 value = "Click Here" onClick = compute() />
<b>is<b>
<input type=text id="outtxt" name=output size="5" value="" disabled /> </b></b></center><b><b>
<BR /><BR />
</b></b></td></form>
</table>
<script type='text/javascript'>
function compute()
{
var enter = document.getElementById("enter");
var outtxt = document.getElementById("outtxt");
var mynmb = enter.value;
if (isNaN(mynmb))
{
outtxt.value = "error !!!";
alert( 'please enter a valid number');
enter.focus();
return;
}
else
{
if ( mynmb%2 == 0 ) { outtxt.value = "Even"; }
if ( Math.abs(mynmb%2) == 1 ) { outtxt.value = "Odd"; }
}
}
</script>
</body>
</html>
<script>
function even_odd(){
var num = document.getElementById('number').value;
if ( num % 2){
document.getElementById('result').innerHTML = "Entered Number is Odd";
}
else{
document.getElementById('result').innerHTML = "Entered Number is Even";
}
}
</script>
</head>
<body>
<center>
<div id="error"></div>
<center>
<h2> Find Given Number is Even or Odd </h2>
<p>Enter a value</p>
<input type="text" id="number" />
<button onclick="even_odd();">Check</button><br />
<div id="result"><b></b></div>
</center>
</center>
</body>
每个奇数除以两片叶子的余数为1,每个偶数除以零时的叶子为零。因此,我们可以使用此代码
function checker(number) {
return number%2==0?even:odd;
}
这就是我所做的
//Array of numbers
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,32,23,643,67,5876,6345,34,3453];
//Array of even numbers
var evenNumbers = [];
//Array of odd numbers
var oddNumbers = [];
function classifyNumbers(arr){
//go through the numbers one by one
for(var i=0; i<=arr.length-1; i++){
if (arr[i] % 2 == 0 ){
//Push the number to the evenNumbers array
evenNumbers.push(arr[i]);
} else {
//Push the number to the oddNumbers array
oddNumbers.push(arr[i]);
}
}
}
classifyNumbers(numbers);
console.log('Even numbers: ' + evenNumbers);
console.log('Odd numbers: ' + oddNumbers);
由于某种原因,我必须确保数组的长度小于一。当我不这样做时,我在oddNumbers数组的最后一个元素中得到“未定义”。
当需要测试某个变量是否为奇数时,应首先测试它是否为integer。另外,请注意,当您计算负数的余数时,结果将为负(-3 % 2 === -1
)。
function isOdd(value) {
return typeof value === "number" && // value should be a number
isFinite(value) && // value should be finite
Math.floor(value) === value && // value should be integer
value % 2 !== 0; // value should not be even
}
如果Number.isInteger可用,您还可以将此代码简化为:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
注意:此处,我们测试value % 2 !== 0
而不是value % 2 === 1
因为-3 % 2 === -1
。如果您不想-1
通过此测试,则可能需要更改此行。
以下是一些测试案例:
isOdd(); // false
isOdd("string"); // false
isOdd(Infinity); // false
isOdd(NaN); // false
isOdd(0); // false
isOdd(1.1); // false
isOdd("1"); // false
isOdd(1); // true
isOdd(-1); // true
使用 %
将帮助您做到这一点...
您可以创建几个函数来为您做这些...我更喜欢separte函数,它不像Javascript那样附加到Number上,它还会检查您是否传递数字:
奇数函数:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
偶函数:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
并这样称呼它:
isOdd(5); // true
isOdd(6); // false
isOdd(12); // false
isOdd(18); // false
isEven(18); // true
isEven('18'); // 'NaN'
isEven('17'); // 'NaN'
isOdd(null); // 'NaN'
isEven('100'); // true
isOdd("str")
应该是假的。isOdd(1.223)
并且isOdd(-1.223)
应该是错误的。isOdd(0)
应该是假的。isOdd(-1)
应该是真的。function isOdd(n) {
// Must be a number
if (isNaN(n)) {
return false;
}
// Number must not be a float
if ((n % 1) !== 0) {
return false;
}
// Integer must not be equal to zero
if (n === 0) {
return false;
}
// Integer must be odd
if ((n % 2) !== 0) {
return true;
}
return false;
}
JS小提琴(如果需要):https : //jsfiddle.net/9dzdv593/8/
Javascript 1-线性解决方案。对于那些不关心可读性的人。
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0
代替了(n % 2) === 0
。(2)我的建议是避免使用!!(n % 2)
,因为(a)它的性能比(n % 2) !== 0
(jsperf.com/notnot-vs-strict-not)慢,(b)是骇客-将胁迫值强制0
转换为false
和(c)这是晦涩的(出于性能考虑,高级编程语言不应像Pascal那样阅读-这是编译器的工作)。(3)是的,缺少{}
语句块确实会导致多个问题(在我的回答中已更新)。
if (0) call1(), assign = 0, call2()
,但单一的说法是不坏的:if (0) return; if (0) ;; if (0); break; if (0) continue;
和我反正宁愿继续使用断线行语句块当我长期内联条件。
isNaN(n)
是愚蠢的-一定要覆盖的NaN
情况下,但是isOdd(null)
,isOdd(undefined)
,isOdd({x:1})
所有的回报false
,我认为是一个错误; 除非您当然只指定函数在给定域上具有正确的行为:仅数字类型输入。在这种情况下,只需放下isNaN
支票并强制用户以正确的类型调用它。防御性编程太糟糕了。然后,您的函数将简化为isOdd = x => Math.floor(x) === x && x & 1 === 1
– 无需返回显式true
或false
值
null
,undefined
和对象{}
都没有奇数,因此该函数返回false
-不知道为什么你认为一个错误。该isNaN
检查是为了提高性能(而不是为了防御),它使函数过早退出而不执行其他检查。
我会实现此方法以返回布尔值:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
它将同时适用于未签名和已签名的数字。当模数返回-1
或1
将转换为true
。
非模量解决方案:
var is_finite = isFinite;
var is_nan = isNaN;
function isOdd (discriminant) {
if (is_nan(discriminant) && !is_finite(discriminant)) {
return false;
}
// Unsigned numbers
if (discriminant >= 0) {
while (discriminant >= 1) discriminant -= 2;
// Signed numbers
} else {
if (discriminant === -1) return true;
while (discriminant <= -1) discriminant += 2;
}
return !!discriminant;
}
在ES6中:
const isOdd = num => num % 2 == 1;
通过使用三元运算符,您可以找到奇数偶数:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
这适用于数组:
function evenOrOdd(numbers) {
const evenNumbers = [];
const oddNumbers = [];
numbers.forEach(number => {
if (number % 2 === 0) {
evenNumbers.push(number);
} else {
oddNumbers.push(number);
}
});
console.log("Even: " + evenNumbers + "\nOdd: " + oddNumbers);
}
evenOrOdd([1, 4, 9, 21, 41, 92]);
这应该注销:4,92 1,9,21,41
只是一个数字:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
这应该甚至输出到控制台