Bất cứ ai cũng có thể chỉ cho tôi một số mã để xác định xem một số trong JavaScript là chẵn hay lẻ?
%toán tử hơn &và 2. Mặc dù &về mặt lý thuyết nhanh hơn, nó thực sự không thành vấn đề .
Bất cứ ai cũng có thể chỉ cho tôi một số mã để xác định xem một số trong JavaScript là chẵn hay lẻ?
%toán tử hơn &và 2. Mặc dù &về mặt lý thuyết nhanh hơn, nó thực sự không thành vấn đề .
Câu trả lời:
Sử dụng mã dưới đây:
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 đại diện cho một số lẻ, trong khi 0 đại diện cho một số chẵn.
0hoặc 1(hoặc NaNnếu bạn cung cấp cho nó thứ gì đó không phải là số và không thể bị ép buộc thành một), sẽ hoạt động tốt trong hầu hết các tình huống. Nhưng nếu bạn muốn có thật truehoặc false:return (num % 2) == 1;
numkhông phải là số nguyên. Sẽ vẫn hoạt động nếu bạn so sánh isOdd(1.5)==true(vì giá trị phân số không bằng true), nhưng sẽ tốt hơn nếu hàm được trả về truehoặc được falsengụ ý bởi tên "isOdd".
return !!(num % 2)để có được một boolean
Sử dụng toán ANDtử bitwise .
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>
Nếu bạn không muốn giá trị trả về chuỗi, mà là giá trị boolean, hãy sử dụng giá trị này:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y!
function isEven(n){return !(n & 1);}.
x & 1kiểm tra nếu bit cuối cùng được đặt trong số (vì 1 Là một số có tất cả các bit được đặt thành 1 ngoại trừ bit có trọng số thấp nhất ): Nếu có , số là số lẻ, nếu không thì chẵn.
Bạn có thể làm một cái gì đó như thế này:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }chỉ là một phiên bản dài dòng không cần thiết của answer = (bool) condition;. Giảm chức năng của bạn xuống function isEven(value) { return (bool) (value%2 == 0); }và tất cả chúng ta sẽ hạnh phúc.
(bool)(điều đó sẽ gây ra lỗi) và trong mọi trường hợp bạn không cần: return value%2 == 0;sẽ thực hiện công việc kể từ khi ==toán tử trả về boolean.
answer = !!(condition). Tất nhiên, điểm tôi đang cố gắng thực hiện là bạn có thể return value%2==0và không cần bận tâm đến điều kiện.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
Tôi có phải làm cho một mảng thực sự lớn có nhiều số chẵn không
Không. Sử dụng mô đun (%). Nó cung cấp cho bạn phần còn lại của hai số bạn đang chia.
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.
Điều này có nghĩa là nếu bạn sửa đổi bất kỳ số x nào bằng 2, bạn sẽ nhận được 0 hoặc 1 hoặc -1. 0 có nghĩa là nó thậm chí. Bất cứ điều gì khác có nghĩa là nó kỳ lạ.
Giống như nhiều ngôn ngữ, Javascript có toán tử mô đun% , tìm thấy phần còn lại của phép chia. Nếu không có phần dư sau khi chia cho 2, một số chẵn là:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Đây là một thành ngữ rất phổ biến để thử nghiệm cho các số nguyên chẵn.
Với bitwise, codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Một chức năng đơn giản bạn có thể vượt qua. Sử dụng toán tử modulo %:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Sử dụng tiện ích mở rộng của tôi:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
sau đó
var a=5;
a.isEven();
== Sai
a.isOdd();
== Đúng
nếu bạn không chắc chắn đó có phải là Số hay không, hãy kiểm tra nó bằng cách phân nhánh sau:
if(a.isOdd){
a.isOdd();
}
CẬP NHẬT:
nếu bạn không sử dụng biến:
(5).isOdd()
Nó chỉ ra rằng mô hình Thủ tục tốt hơn mô hình OOP. Nhân tiện, tôi đã thực hiện hồ sơ trong FIDDLE này . Tuy nhiên, cách OOP vẫn đẹp nhất.
Chỉ cần thực hiện điều này trong Adobe Dreamweaver..it hoạt động hoàn hảo. tôi đã sử dụng nếu (isNaN (mynmb))
để kiểm tra xem Giá trị đã cho có phải là số hay không và tôi cũng đã sử dụng Math.abs (mynmb% 2) để chuyển đổi số âm thành dương và tính toán
<!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>
if (X % 2 === 0){
} else {
}
Thay thế X bằng số của bạn (có thể đến từ một biến). Câu lệnh If chạy khi số chẵn, Khác khi nó là số lẻ.
Nếu bạn chỉ muốn biết nếu có bất kỳ số nào là số lẻ:
if (X % 2 !== 0){
}
Một lần nữa, thay thế X bằng một số hoặc biến.
Mỗi số lẻ khi chia cho hai lá còn lại là 1 và mọi số chẵn khi chia cho 0 sẽ để lại số 0 là số dư. Do đó chúng ta có thể sử dụng mã này
function checker(number) {
return number%2==0?even:odd;
}
Còn cái này thì sao...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
Đây là những gì tôi đã làm
//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);
Vì một số lý do, tôi phải đảm bảo độ dài của mảng nhỏ hơn một. Khi tôi không làm điều đó, tôi nhận được "không xác định" trong phần tử cuối cùng của mảng lẻNumbers.
Khi bạn cần kiểm tra xem một số biến có phải là số lẻ hay không, trước tiên bạn nên kiểm tra xem nó có phải là số nguyên không . Ngoài ra, lưu ý rằng khi bạn tính phần còn lại trên số âm, kết quả sẽ là âm ( -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
}
Nếu Number.isInteger khả dụng, bạn cũng có thể đơn giản hóa mã này thành:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Lưu ý: ở đây, chúng tôi kiểm tra value % 2 !== 0thay vì value % 2 === 1là vì -3 % 2 === -1. Nếu bạn không muốn -1vượt qua bài kiểm tra này, bạn có thể cần phải thay đổi dòng này.
Dưới đây là một số trường hợp thử nghiệm:
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
Sử dụng % sẽ giúp bạn làm điều này ...
Bạn có thể tạo một vài hàm để làm điều đó cho bạn ... Tôi thích các hàm separte không được gắn với Số trong Javascript như thế này cũng kiểm tra xem bạn có chuyển số hay không:
hàm lẻ:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
hàm chẵn:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
và gọi nó như thế này:
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")nên sai isOdd(1.223)và isOdd(-1.223)nên sai. isOdd(0)nên sai isOdd(-1)nên đúng 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;
}
Fiddle JS (nếu cần): https://jsfiddle.net/9dzdv593/8/
Giải pháp Javascript 1-liner. Đối với những người không quan tâm về khả năng đọc.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0thay vì (n % 2) === 0. (2) Lời khuyên của tôi là tránh !!(n % 2), bởi vì (a) nó có hiệu suất chậm hơn (n % 2) !== 0( jsperf.com/notnot-vs-strict-not ), (b) đó là một hack - nó ép giá trị falsey 0vào falsevà (c) nó tối nghĩa (ngôn ngữ lập trình cấp cao không nên đọc như Pascal vì mục đích hiệu suất - đó là công việc của nhà soạn nhạc). (3) Có, {}các câu lệnh chặn bị thiếu sẽ dẫn đến một số vấn đề (như được cập nhật trong câu trả lời của tôi).
if (0) call1(), assign = 0, call2()nhưng một câu lệnh không tệ: if (0) return; if (0) ;; if (0); break; if (0) continue;và dù sao tôi vẫn thích tiếp tục sử dụng câu lệnh chặn dòng khi tôi điều kiện nội tuyến dài.
isNaN(n)là ngớ ngẩn - chắc chắn rằng bạn bao gồm các NaNtrường hợp, nhưng isOdd(null), isOdd(undefined), isOdd({x:1})tất cả trở lại falsemà tôi cho là một lỗi; tất nhiên trừ khi bạn chỉ xác định rằng chức năng của bạn có hành vi đúng đối với một miền nhất định: chỉ các đầu vào loại Số. Trong trường hợp đó, chỉ cần bỏ isNaNkiểm tra và buộc người dùng gọi nó với đúng loại. Lập trình phòng thủ là khủng khiếp. Sau đó, chức năng của bạn được đơn giản hóa thành isOdd = x => Math.floor(x) === x && x & 1 === 1- trả lại giá trị rõ ràng truehoặc falsekhông cần thiết
null, undefinedVà các đối tượng{} không phải là số nguyên lẻ, và do đó trở về chức năng false- không chắc chắn lý do tại sao bạn xem xét rằng một lỗi. Các isNaNkiểm tra là để thực hiện (không phải cho quốc phòng), nó cho phép lối ra chức năng sớm mà không thực hiện việc kiểm tra khác.
Tôi sẽ thực hiện điều này để trả về một boolean:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Nó sẽ hoạt động trên cả số chưa ký và số đã ký. Khi mô đun trở lại -1hoặc 1nó sẽ được dịch sangtrue .
Giải pháp không mô đun:
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;
}
trong ES6:
const isOdd = num => num % 2 == 1;
Bằng cách sử dụng toán tử ternary, bạn có thể tìm thấy các số chẵn lẻ:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
cái này hoạt động cho mảng:
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]);
điều này nên đăng xuất: 4,92 1,9,21,41
chỉ một số:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
điều này sẽ xuất ngay cả đến bàn điều khiển