Как в reduce обработать предыдущий елемент?

Подскажите пожалуйста как в reduce начать обработку с первого элемента, и только после второй иттерации присваивать предыдущий?

И через какой варинат лучше делать, через for или через reduce?

let tf = '1h';
let interval = {
  '1m': 60,
  '5m': 300,
  '15m': 900,
  '30m': 1800,
  '1h': 3600,
  '4h': 14400,
  '6h': 21600,
  '12h': 43200,
  '1d': 86400
};

let labels = '';
for (let i in interval) {
  labels += `<label><input type="radio" name="chart-tf[]" value="${i}"${(tf == i) ? ' checked' : ''}><span>${i.toUpperCase()}</span></label>`;
}

let labels2 = Object.entries(interval).reduce((p, c) => p + `<label><input type="radio" name="chart-tf2[]" value="${c[0]}"${(tf == c[0]) ? ' checked' : ''}><span>${c[0].toUpperCase()}</span></label>`);

document.querySelector('.labels').innerHTML = labels;
document.querySelector('.labels2').innerHTML = labels2;
<div class="labels"></div>
<div class="labels2"></div>


Ответы (1 шт):

Автор решения: Andrey Semykin

В reduce надо было указать начальное значение аккумулятора, тогда все нормально работает. И лучше сразу брать Object.keys, чтобы не указывать потом везде нулевой индекс.

let tf = '1h';
let interval = {
  '1m': 60,
  '5m': 300,
  '15m': 900,
  '30m': 1800,
  '1h': 3600,
  '4h': 14400,
  '6h': 21600,
  '12h': 43200,
  '1d': 86400
};

let labels = '';
for (let i in interval) {
  labels += `<label><input type="radio" name="chart-tf[]" value="${i}"${(tf == i) ? ' checked' : ''}><span>${i.toUpperCase()}</span></label>`;
}

let labels2 = Object.keys(interval).reduce((p, c) => p + `<label><input type="radio" name="chart-tf2[]" value="${c}"${(tf == c) ? ' checked' : ''}><span>${c.toUpperCase()}</span></label>`,'');

document.querySelector('.labels').innerHTML = labels;
document.querySelector('.labels2').innerHTML = labels2;
<div class="labels"></div>
<div class="labels2"></div>

→ Ссылка