JavaScriptの数値が偶数か奇数かを判断するコードを誰かに教えてもらえますか?
JavaScriptの数値が偶数か奇数かを判断するコードを誰かに教えてもらえますか?
回答:
以下のコードを使用してください:
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; }は、の不必要に冗長なバージョンです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
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
偶数の多い配列を本当に大きくする必要がありますか
いいえ。係数(%)を使用します。それはあなたがあなたが割っている2つの数字の残りをあなたに与えます。
Ex. 2 % 2 = 0 because 2/2 = 1 with 0 remainder.
Ex2. 3 % 2 = 1 because 3/2 = 1 with 1 remainder.
Ex3. -7 % 2 = -1 because -7/2 = -3 with -1 remainder.
つまり、xを2で変更すると、0、1、または-1のいずれかになります。0は、均等であることを意味します。それ以外は奇妙なことを意味します。
渡すことができる単純な関数。モジュロ演算子を使用します%:
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();
==真
Numberかどうかわからない場合は、次の分岐でテストしてください。
if(a.isOdd){
a.isOdd();
}
更新:
変数を使用しない場合:
(5).isOdd()
手続き型パラダイムはOOPパラダイムよりも優れていることがわかります。ちなみに、このFIDDLEでプロファイリングを行い ました。ただし、OOPの方法はまだきれいです。
これをAdobe Dreamweaverで実行すると、完全に機能します。(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>
2で割ったときのすべての奇数は1として残り、0で割ったときのすべての偶数は残りとしてゼロを残します。したがって、このコードを使用できます
function checker(number) {
return number%2==0?even:odd;
}
これはどう...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
これは私がやったことです
//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);
何らかの理由で、配列の長さを1だけ短くする必要がありました。それを行わないと、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
を使用%すると、これを行うのに役立ちます...
あなたはあなたのためにそれを行うためにいくつかの関数を作成することができます...私はあなたが数値を渡すかどうかもチェックするこのような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 Fiddle(必要な場合):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)私のアドバイスは、(a)(jsperf.com/notnot-vs-strict-not)!!(n % 2)よりもパフォーマンスが遅いため、(b)これはハックです-に誤った値を強制し、(c)それはあいまいです(高水準プログラミング言語は、パフォーマンスのためにPascalのように読むべきではありません-それはコンパイラの仕事です)。(3)はい、欠落しているブロックステートメントはいくつかの問題を引き起こします(私の回答で更新されています)。(n % 2) !== 00false{}
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));
これはコンソールにも出力されるはずです