'Google Earth Engine: remove masked/null value from a list

I am able to remove null value from a list using the following methods:

print(ee.List([1,7, null, 3,5]).filter(ee.Filter.gt('item',0)))
print(ee.List([1,7, null, 3,5]).filter(ee.Filter.neq('item', null)))

However, I got the error ImageCollection (Error) List.get: List is empty (index is 1). in my code. The daily LSTs are put into a list and I am trying to extract the second largest LST for study years. What I am doing wrong here? Thanks for your help in advance.

Here is the code:

var startDate = ee.Date('2001-01-01'); // set start time for analysis
var endDate = ee.Date('2001-12-31'); // set end time for analysis

// calculate the number of year to process
var nyears = ee.Number(endDate.difference(startDate,'year'));

//init a time band
var createTimeBand= function(image) {
  return image.addBands(image.metadata('system:time_start')
  .divide(1e18))
 // .divide(1000*60*60*24*365))
}
var sst = ee.ImageCollection('MODIS/006/MOD11A1').select('LST_Day_1km')
            .filterDate(startDate, endDate)
            //.map(createTimeBand)
            
var byyearMin = ee.ImageCollection(
  // map over each month
  ee.List.sequence(0,nyears).map(function (n) {
    // calculate the offset from startDate
    var ini = startDate.advance(n,'year');
    // advance just one month
    var end = ini.advance(1,'year');

    var sortedDays = sst.filterDate(ini,end)
    .sort('LST_Day_1km').filter(ee.Filter.neq('item', null))//.filter(ee.Filter.neq('item', ""))
    .toList(sst.size())
    //print(ee.List(sst))
    //var sortedDays_clean = sortedDays.replaceAll(" ", 0)
    //var sortedDays_clean = sortedDays.filter(ee.Filter.gt('item',1))
    
    var secondLargest = ee.List(sortedDays.get(1))
    //var secondSmallest = ee.List(sortedDays.get(-1))
    var collection = ee.Image(secondLargest)
    //.addBands(secondSmallest).rename(['secondLargest', 'secondSmallest'])
    .multiply(0.02)
      .subtract(273.15)
      return collection
      .set('system:time_start', ini.millis()) //convert time to number
      .set('Date', ee.Date(ini))

}));

print(byyearMin)


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source