сортировка в цикле for in (js)
столкнулся со следующей проблемой: есть объект с датами(dates), через цикл for (date in dates) я должен по ним пробежаться, но почему-то даты сортируются (даты с (2) на конце шли до цикла за обычными датами) но в цикле они стали в самом конце. можно ли как то избавиться от этой сортировки?
dates = {
'2009': { href: '' },
'2009(2)': { href: '' },
'2010': { href: '' },
'2010(2)': { href: '' },
'2011': { href: '' },
'2011(2)': { href: '' },
'2012': { href: '' },
'2013': { href: '' },
'2014': { href: '' },
'2015': { href: '' },
'2016': { href: '' },
'2016(2)': { href: '' },
'2017': { href: '' },
'2018': { href: '' },
'2019': { href: '' },
'2020': { href: '' },
'2021': { href: '' }
}
for (date in dates){
console.log(date)
}
Ответы (2 шт):
Вероятно, костыль, но работает:
const dates = {
'2009': { href: '' },
'2009(2)': { href: '' },
'2010': { href: '' },
'2010(2)': { href: '' },
'2011': { href: '' },
'2011(2)': { href: '' },
'2012': { href: '' },
'2013': { href: '' },
'2014': { href: '' },
'2015': { href: '' },
'2016': { href: '' },
'2016(2)': { href: '' },
'2017': { href: '' },
'2018': { href: '' },
'2019': { href: '' },
'2020': { href: '' },
'2021': { href: '' }
};
const res = [];
for (date in dates) {
res.push(date)
}
res.sort((a, b) => a.slice(0, 4) - b.slice(0, 4));
console.log('res: ', res);
Рекомендую в таких случаях, где очень важен порядок ключей использовать new Map, который гарантированно выдаст ключи и значения том же порядке, в котором были вставлены. Завтра вам может не понадобиться чтобы ключи были хоть как-то отсортированы, тогда ответ @Listopad02 не поможет вам. Плюс не надо создавать лишних массивов и отдельно тратить время на сортировку
Код:
const dates = new Map([
['2009', { href: '' }],
['2009(2)', { href: '' }],
['2010', { href: '' }],
['2010(2)', { href: '' }],
['2011', { href: '' }],
['2011(2)', { href: '' }],
['2012', { href: '' }],
['2013', { href: '' }],
['2014', { href: '' }],
['2015', { href: '' }],
['2016', { href: '' }],
['2016(2)', { href: '' }],
['2017', { href: '' }],
['2018', { href: '' }],
['2019', { href: '' }],
['2020', { href: '' }],
['2021', { href: '' }]
])
for (const [key, value] of dates) {
console.log(key);
}