Итерировать массив с jquery - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в jquery, и у меня возникают проблемы с применением определенных методов. Я пытаюсь go с помощью операторов, которые у меня есть, в перетаскиваемом слое, чтобы получить их права и, таким образом, получить максимальное значение для всех них, чтобы иметь возможность произвести более поздние вычисления. Он возвращает мне все операторы в слое, когда я ищу, чтобы получить тот, который имеет наибольшее значение. Это мой код:

var operatorLayer = containerParent.find('.main-operators-layer')[0];
operatorsData = $(operatorLayer).children('.main-operator'); 

var actualContainerWidth = $.grep(operatorsData, function(element, index) {
     var rightValues = [];
     var rightOffsetData = element.getBoundingClientRect().right;
     rightValues.push(rightOffsetData);
     Math.max(rightValues);
     return rightValues;
});                    


Если кто-то может исправить меня, я был бы признателен. Спасибо

1 Ответ

1 голос
/ 05 марта 2020

jQuery manual говорит мне grep:

Находит элементы массива, которые удовлетворяют функции фильтра. На исходный массив это никак не повлияет.

Функция, которую вы передаете в grep, должна возвращать логическое значение, истинное или ложное, чтобы указать, сохраняем ли мы элемент или нет.

В вашем случае вы, кажется, возвращаете [element.getBoundingClientRect().right]:

  • var rightValues = []; создает новый пустой массив
  • var rightOffsetData = element.getBoundingClientRect().right; rightValues.push(rightOffsetData); добавляет right к массиву
  • Math.max(rightValues); вычисляет (а затем игнорирует) наибольшее число в массиве с 1 элементом
  • return rightValues; возвращает массив с одной записью, что не является ложью, поэтому запись сохраняется

Предположительно, вам нужно что-то вроде:

  • Составьте список из rightOffsetData значений
  • Рассчитайте наибольшее из этих значений

Это может привести к чему-то вроде этого:

var actualContainerWidth = Math.max($.map(operatorsData, function(element) {
  return element.getBoundingClientRect().right;
}));

Используется map функция :

Перевести все элементы в массив или объект в новый массив элементов.

  • $.map(operatorsData, function(element) { return element.getBoundingClientRect().right; }) преобразует список операторовData в список их ограничивающих-правых * 10 54 *
  • Math.max(...) принимает форму самого высокого значения из этого списка
  • var actualContainerWidth = Math.max(...) заставляет actualContainerWidth принимать это значение
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...