Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнить высоты элементов 2 массивов (https://javascript.ru/forum/misc/57632-sravnit-vysoty-ehlementov-2-massivov.html)

Velidan 12.08.2015 16:41

Сравнить высоты элементов 2 массивов
 
Доброго дня уважаемые коллеги. Поиск выдал, что подобные запросы (Сравнение 2 массивов) слишком часто используются и ничего не выдал.

Подскажите пожалуйста, как лучше сделать так, чтобы можно было сравнить высоты элементов 2 массивов и назначить тому у которого меньше высота, высоту элемента у которого она больше.

Пытаюсь сделать так:

var tableItems = [].slice.call(this.table.querySelectorAll('td:first-child')),
            cloneItems = [].slice.call(this.cloneTable.querySelectorAll('td:nth-child(3)'));

        function compare(arr, arr2) {
            if (arr.length !== arr2.length) {return false; }
            var on = 0,
                i,
                j;

            for (i = 0; i < arr.length; ++i) {

                for (j = 0; j < arr2.length; ++j ) {

                    if (arr[i].offsetHeight !== arr2[j].offsetHeight) {
                                 arr[i].style.height = Math.max(arr[i].offsetHeight,   
                                                             arr2[j].offsetHeight) + 'px';
                          }

                }

            }

        }

       compare(tableItems, cloneItems);


Только у меня перемножение получается (в 2 массивав по 220 элементов и все сравнивается 48400).

Помогите разобраться, что я неправильно делаю. Заранее спасибо.

П.С. еще мне кажется, что я точно что-то не так делаю, потому что все очень долго думает.

рони 12.08.2015 16:49

Velidan,
var tableItems = [].slice.call(this.table.querySelectorAll('td:first-child')),
      cloneItems = [].slice.call(this.cloneTable.querySelectorAll('td:nth-child(3)'));

  function compare(arr, arr2) {
      if (arr.length !== arr2.length) {
          return false;
      }
      for (var i = 0; i < arr.length; i++) {
          arr[i].style.height = arr2[i].style.height = Math.max(arr[i].offsetHeight, arr2[i].offsetHeight) + 'px';
      }

  }

  compare(tableItems, cloneItems);

Velidan 12.08.2015 17:02

Рони, Вы в который раз мне просто невероятно помогаете и каждый раз мне есть что почерпнуть у Вас. Безгранично благодарен.

Легко, красиво и изящно. Замечательно просто. Не подумал, даже что так можно. В голову не пришло вообще.

П.С. Я уже дошел до вот таких монстров, пока не увидел Ваш ответ

for (i = 0; i < arr.length; ++i) {

                for (j = 0; j < arr2.length; ++j ) {

                    if (arr[i].offsetHeight < arr2[j].offsetHeight) {
                        arr[i].style.height = arr2[j].offsetHeight + 'px';
                        break;
                    } else {
                        arr2[j].style.height = arr[i].offsetHeight + 'px';
                        break;
                    }


                }

            }


П.С. + поставить система не дает, так как "Вы должны поставить кому-то еще, прежде чем отблагодарить".


Часовой пояс GMT +3, время: 18:04.