Mi estructura de API
let datas = [{ end_date: '2019-12-16' }, { end_date: '2018-12-16' }]; let latestData = datas.filter( /* I need an index number of item based on latest date */ );Buscando código JavaScript vainilla
No hay necesidad de ordenar (snark eliminado). Itere la matriz y realice un seguimiento del índice que contiene el valor más grande. Aquí hay una implementación usando Array.reduce :
let datas = [{ end_date: '2018-12-16' }, { end_date: '2020-12-16' }, { end_date: '2019-12-16' }, { end_date: '2017-12-16' }]; let index = datas.reduce((retval, item, index, array) => retval === -1 || array[retval].end_date < item.end_date ? index : retval, -1); console.log(index);Puede usar Array.sort() con localeCompare() para comparar las cadenas
let datas = [ { end_date: '2019-12-16' }, { end_date: '2019-12-16' }, { end_date: '2022-12-16' } ] const res = datas.map((date, i)=>(date.i=i, date)).sort((a,b)=>{ return b.end_date.localeCompare(a.end_date); }) console.log(res[0]);Alternativamente, puede usar un enfoque Array.reduce() más eficaz.
let datas = [ { end_date: '2019-12-16' }, { end_date: '2019-12-16' }, { end_date: '2022-12-16' } ] const r=datas.reduce((acc, curr, i)=>{ if(Object.keys(acc).length === 0){ return {...curr, i: i}; }else if(new Date(acc.end_date) < new Date(curr.end_date)){ return {...curr, i: i}; }else return acc; },{}); console.log(r);Intenta usar .sort() .
Si ordena la matriz en orden de fecha reciente, la fecha más reciente aparecerá primero en la matriz. Se recomienda usar .sort() .
const datas = [{end_date: '2018-12-16'}, {end_date: '2020-12-16'}, {end_date: '2019-12-16'}, {end_date: '2017-12-16'} ]; const latestData = datas.sort((a, b) => { return new Date(b.end_date) - new Date(a.end_date); }); console.log(latestData[0]); // {end_date: '2020-12-16'}Editar.
Si desea obtener solo el índice de matriz de origen.
const datas = [{end_date: '2018-12-16'}, {end_date: '2020-12-16'}, {end_date: '2019-12-16'}, {end_date: '2017-12-16'} ]; const timestamps = datas.map((obj) => { return +new Date(obj.end_date); }); const latest = +new Date(Math.max(...timestamps)); const latestDataIndex = timestamps.indexOf(latest); console.log(datas[latestDataIndex]);Más.
Puede usar for loop para explorar la matriz solo una vez sin ordenarla.
const datas = [{end_date: '2018-12-16'}, {end_date: '2020-12-16'}, {end_date: '2019-12-16'}, {end_date: '2017-12-16'}, {end_date: '2021-12-16'} ]; let minDate = datas[0]; let index = 0; for (let i = 0; i < datas.length; i++) { const currentData = datas[i]; if (new Date(minDate.end_date) < new Date(currentData.end_date)) { minDate = currentData; index = i; } } console.log(datas[index]);