【问题标题】:Iterate an array with jquery用jquery迭代一个数组
【发布时间】:2020-06-18 12:44:09
【问题描述】:

我是 jquery 新手,在应用某些方法时遇到了问题。 我正在尝试通过可拖动层中的运算符来获得正确的结果,从而获得所有运算符的最大值以便能够进行以后的计算。 当我正在寻找的是获得具有最高价值的那个时,它让我返回了该层中的所有运算符。 这是我的代码:

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;
});                    


如果有人能纠正我,我将不胜感激。 谢谢

【问题讨论】:

  • rightOffsetData 是一个数组吗?如果是这样,只需使用 Math.max。
  • 我试过了``` var actualContainerWidth = $.grep(operatorsData, function(element, index) { var rightOffsetData = element.getBoundingClientRect().right; return Math.max(rightOffsetData) ; }); ``` 但它仍然返回给我层中的所有运算符。
  • rightOffsetData 是什么样的?
  • 在这种情况下,图层上有 3 个运算符返回一个像这样的数组 [div.main-operator.operator-0.main-default-operator.ui-draggable, div.main-operator. operator-1.main-default-operator.ui-draggable, div.main-operator.operator-2.main-default-operator.ui-draggable]
  • Math.max returns 最大值;它不会将输入转换为最大值。

标签: jquery arrays loops math grep


【解决方案1】:

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;
}));

它使用the map function:

将数组或对象中的所有项转换为新的项数组。

  • $.map(operatorsData, function(element) { return element.getBoundingClientRect().right; }) 将 operatorData 列表转换为他们的 bounding-thingy-right 列表
  • Math.max(...) 采用列表中的最高值形式
  • var actualContainerWidth = Math.max(...) 使 actualContainerWidth 采用该值

【讨论】:

  • 非常感谢您的解释!它工作得很好,解释再好不过了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2016-06-23
相关资源
最近更新 更多