Создать массив минут в 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) })))

→ Ссылка