Чи може хтось вказати мені на якийсь код, щоб визначити, чи є число в JavaScript парним чи непарним?
%оператора, ніж &2. Хоча &теоретично швидше, це насправді не має значення .
Чи може хтось вказати мені на якийсь код, щоб визначити, чи є число в JavaScript парним чи непарним?
%оператора, ніж &2. Хоча &теоретично швидше, це насправді не має значення .
Відповіді:
Використовуйте наведений нижче код:
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якщо ви будете годувати його чимось, що не є числом, і його не можна примусити до одного), що буде добре працювати в більшості ситуацій. Але якщо ви хочете справжнього 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); }
Чи потрібно робити масив дійсно великим, який має багато парних чисел
Ні. Використовуйте модуль (%). Це дає вам залишок двох чисел, які ви ділите.
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 означатиме, що це рівномірно. Все інше означало б, що це дивно.
Як і в багатьох мовах, у Javascript є оператор модуля% , який знаходить решту поділу. Якщо після ділення на 2 немає залишку, число є парним:
// this expression is true if "number" is even, false otherwise
(number % 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()
Виявляється, процедурна парадигма краща за парадигму ООП. До речі, я виконував профілювання в цьому ПІДТВОРЕННІ . Однак спосіб OOP як і раніше найкрасивіший.
Ви можете використовувати для оператора і умовного, щоб визначити, чи число чи ряд чисел непарні:
for (var i=1; i<=5; i++)
if (i%2 !== 0) {
console.log(i)
}
Це надрукує кожне непарне число від 1 до 5.
Щойно виконаний цей в 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>
if (X % 2 === 0){
} else {
}
Замініть X своїм номером (може походить зі змінної). Оператор If запускається, коли число парне, Else - коли непарне.
Якщо ви просто хочете дізнатися, чи якесь задане число є непарним:
if (X % 2 !== 0){
}
Знову замініть X числом чи змінною.
Кожне непарне число, яке ділиться на два листки, залишається на 1, а кожне парне число при діленні на нуль залишає нуль як залишок. Отже, ми можемо використовувати цей код
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);
Я чомусь повинен був переконатися, що довжина масиву менша на одиницю. Коли я цього не роблю, я отримую "невизначений" в останньому елементі масиву oddNumbers.
Коли вам потрібно перевірити, чи якась змінна непарна, спершу слід перевірити, чи вона є цілою . Також зауважте, що при обчисленні залишку за від’ємним числом результат буде від’ємним ( -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, як ця, яка також перевіряє, чи передаєте ви номер чи ні:
непарна функція:
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) Моя порада - уникати !!(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));
це має виводитись навіть на консоль