Having an array like this
myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
is there a way to get the last non-null element?
In this case it should be 423.2
.
Having an array like this
myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
is there a way to get the last non-null element?
In this case it should be 423.2
.
- 4 The "problems" you keep asking about (stackoverflow.com/questions/49190521/…) require no more than one minute of thought and no more than one line of code. Are they really worth wasting space on SO servers? – georg Commented Mar 9, 2018 at 9:54
- And why you're now adding lodash/underscore to the problem (stackoverflow.com/questions/49191915/…)? – Andreas Commented Mar 9, 2018 at 10:47
4 Answers
Reset to default 9The easiest way of doing this is to filter out the null
items using .filter
, and then get the last element using .slice
:
lastNonNull = myArray.filter(x => x != null).slice(-1)[0]
console.log(lastNonNull) // 432.2
To break this down a bit:
myArray
.filter(x => x != null) // returns ["test", 32.5, 11.3, 0.65, 533.2, 423.2]
.slice(-1) // returns [423.2]
[0] // returns 423.2
Another way is Array#reduce()
:
var myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
var last = myArray.reduce((acc, curr) => curr ? curr : acc);
console.log(last);
Use reverse
and find
["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null].reverse().find( s => s != null )
Or just one reduceRight
var arr = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null]
arr.reduceRight( (a,c) => ( c != null && a == null ? c : a) , null)
You can use filter
to filter the non null elements and use pop
to get the last element.
let myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
let result = myArray.filter( v => v !== null ).pop();
console.log( result );