@DeniSidorenko

Как превратить код дабы использовать один цикл?

var SliderPoint = document.getElementsByClassName('slider-point');
	var sliderPointHeights = [];

	for(var i = 0 ; i< SliderPoint.length; i++){
		sliderPointHeights.push(SliderPoint[i].offsetHeight)
	}
	var maxHeightSlider = Math.max.apply(null, sliderPointHeights);

	for(var i = 0; i<SliderPoint.length; i++){
		SliderPoint[i].style.height = maxHeightSlider + 'px';
	}


p.S Код получает все элементы, вычитает у кого макс. высота и задаем остальным, дабы была ровная высота. Как сократить код до одного цикла если это возможно
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@Alibek-kz
Можно сделать так

var SliderPoint = document.getElementsByClassName('slider-point');

  var maxHeightSlider = Math.max.apply(null, sliderPoint.map(function (el) { return el.offsetHeight }));

  for(var i = 0; i<SliderPoint.length; i++){
    SliderPoint[i].style.height = maxHeightSlider + 'px';
  }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вообще, это невозможно сделать одним циклом. Нам ведь нужна максимальная высота среди всех элементов, а чтобы её найти - нужно проверить высоту каждого из элементов, а потом её установить каждому. В предложенном вами коде в реальности есть 3 цикла:
  • for
  • max
  • for


Если у вас возникает вопрос, почему max - цикл, то вот вам ответ: если вы передадите функции массив чисел, среди которых нужно найти наибольшее, то вам в любом случае нужно все перебирать = цикл.

Лучшее, чего можно добиться - два цикла:
var SliderPoint = document.getElementsByClassName('slider-point');
var count = SliderPoint.length;
var maxHeightSlider = SliderPoint[0].offsetHeight;
for (var i = 1; i < count; i++) {
  maxHeightSlider = Math.max(maxHeightSlider, SliderPoint[i].offsetHeight)
}
for (var i = 0; i < count; i++) {
  SliderPoint[i].style.height = maxHeightSlider + 'px';
}
Ответ написан
Комментировать
@maxfox
Можно использовать CSS-переменную.
Если вам просто нужно выровнять высоту, то используйте flexbox.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы