Создать массив минут в JavaScript
Подскажите как создать массив методов минут [{id:01, name: "01"},{id:02, name: "02"}] и так до 60 ?
Ответы (3 шт):
Автор решения: nörbörnën
→ Ссылка
const arr = new Array(60).fill(0)
.map((_, idx) => ({ id: idx, name: `${idx}`.padStart(2, 0) }))
console.log(arr)
Автор решения: vp_arth
→ Ссылка
Такого рода генерацию можно делать на, кхм.. генераторах.
Это позволяет не тратить память на целый массив. В то же время итератор позволяет в любой момент пробежаться по всем элементам последовательности.
function* minutes() {
for (let i = 0; i < 60; ++i) {
yield i.toString().padStart(2, 0);
}
}
function* key_value(source, idKey = 'id', nameKey = 'title') {
for (const item of source) {
yield {[idKey]: Number(item), [nameKey]: item};
}
}
// Из этого можно построить удобный итератор
for (const minute of key_value(minutes(), 'id', 'name')) {
if (minute.id > 15) break;
console.log(minute.id, minute.name);
}
// А если уж нужен именно массив, всегда можно его собрать:
const minArray = Array.from(key_value(minutes()))
console.log(JSON.stringify(minArray))
Автор решения: Денис Степанов
→ Ссылка
Просто добавлю, что можно и так попробовать.
const evenNumbers = new Proxy([], {
get(target, idx) {
if (idx === 'length') return 60;
return (idx >= 0 && idx <= 60) ? ({
id: idx,
name: `${idx}`.padStart(2, 0),
}) : Reflect.get(target, idx);
},
has(target, idx) {
return idx > 0 && idx <= 60 ? true : Reflect.has(target, idx);
}
});
evenNumbers.forEach(element => console.log(element))
console.log(Array.from({length: 60}, (_, idx) => ({ id: idx, name: `${idx}`.padStart(2, 0) })))