Is it possible to do something like this in JavaScript?
max = (max < b) ? b;
In other words, assign value only if the condition is true. If the condition is false, do nothing (no assignment). Is this possible?
Is it possible to do something like this in JavaScript?
max = (max < b) ? b;
In other words, assign value only if the condition is true. If the condition is false, do nothing (no assignment). Is this possible?
Don't use the ternary operator then, it requires a third argument. You would need to reassign max
to max
if you don't want it to change (max = (max < b) ? b : max
).
An if-statement is much more clear:
if (max < b) max = b;
And if you need it to be an expression, you can (ab)use the short-circuit-evaluation of AND:
(max < b) && (max = b)
Btw, if you want to avoid repeating variable names (or expressions?), you could use the maximum function:
max = Math.max(max, b);
An expression with ternary operator must have both values, i.e. for both the true and false cases.
You can however
max = (max < b) ? b : max;
in this case, if condition is false, value of max
will not change.
You can just set max
to itself if the condition is false.
max = (max < b) ? b : max;
Or you can try using the &&
operator:
(max < b) && (max = b);
Or to keep your code simple, just use an if
.
if(max < v) max = b;
There isn't a specific operator that isn't the ternary operator, but you can use it like this:
max = (max < b) ? b : max;
a = b > a ? b : a
the average time was 90.8ms for 40,000,000 iterations over 10 runs
(b > a) && (a = b)
the average time was 88.7ms for 40,000,000 iterations over 10 runs
a = Math.max(a, b)
the average time was 117.3ms for 40,000,000 iterations over 10 runs
if (b > a) a = b
the average time was 88.9ms for 40,000,000 iterations over 10 runs you can try:
(max < b) && (max = b);
look at this example:
let max = 10;
let b = 15;
(max < b) && (max = b)// this will be true
console.log("max=", max);
let maxx = 10
let bb = 5;
(maxx < bb) && (maxx = bb)// this will be false
console.log("maxx=", maxx);
The ternary operator is used where we have a minimum of two possible outcomes.
let no = 10;
let max = 20;
max = no > max ? no : max
if you only want to use if, not else, then I recommend you to use if not the ternary operator.
let no = 10;
let max = 20;
if (no > max){
max = no
}
if you want to use ternary operator, but don't want to use else part, then you may use this, but this won't be useful in every problem
let no = 10;
let max = 20;
no > max ? max = no : 0
here we are assigning value to a max variable only when the condition is true, otherwise, we are not doing anything
There was no example of ES6, we can use in this way:
let list = [{id: "abc", name: "test1"}, {id: "xyz", name: "test2"}]
let selectedData = {};
list.some((exp) => {
return (
exp.id == "xyz" &&
((selectedData = exp), true)
);
})
console.log(selectedData);
Added description after a negative vote:
Just adding a description to explain my solution. If you have an array of objects and you want if only one condition satisfies then we can use some
. It will set the selectedData
when the id == "xyz"
. As asked in the question, this will assign value only if the condition is true otherwise selectedData
will be empty.
Instead of the ternary operator, you could use Logical AND assignment (&&=).
Basic examples
let output = false;
output &&= true;
console.log(output)
Reassignment is not possible because output
has been defined as false.
const b = 10;
const max = 1;
let sum = max < b;
sum &&= 'new value';
console.log(sum);
Returns a string, because the variable sum
has been defined as true.
(A different way) To make the answer more complicated & useless...::
// ;M1;
let max = 99;
let b1 = 50;
let b2 = 100;
let max_ori = max;
max = (max < b1) && b1;
max ||= max_ori;
expect(max).toEqual(99);
max = (max < b2) && b2;
max ||= max_ori;
expect(max).toEqual(100);
// ;M2;
max = 99;
b1 = 50;
b2 = 100;
max = ((max < b1) && b1) || max;
expect(max).toEqual(99);
max = ((max < b2) && b2) || max;
expect(max).toEqual(100);
JavaScript || or operator with an undefined variable
The logical OR assignment (
x ||= y
) operator only assigns ifx
is falsy.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment
returning immediately with the value of the first falsy operand it encounters; if all values are truthy, the value of the last operand is returned.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND