@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 Код получает все элементы, вычитает у кого макс. высота и задаем остальным, дабы была ровная высота. Как сократить код до одного цикла если это возможно
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 3
  • @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';
      }
    Ответ написан
  • @Tarik02
    Вообще, это невозможно сделать одним циклом. Нам ведь нужна максимальная высота среди всех элементов, а чтобы её найти - нужно проверить высоту каждого из элементов, а потом её установить каждому. В предложенном вами коде в реальности есть 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.
    Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы