最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get the last non-null element of an array - Stack Overflow

programmeradmin1浏览0评论

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.

Share Improve this question asked Mar 9, 2018 at 9:47 Samurai JackSamurai Jack 3,1259 gold badges36 silver badges59 bronze badges 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
Add a comment  | 

4 Answers 4

Reset to default 9

The 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 );

发布评论

评论列表(0)

  1. 暂无评论