Как в 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>