我们有一个无序列表。
<ul>
<li class="item" data-speed="500" data-delay="150"></li>
<li class="item" data-speed="700"></li>
</ul>
我正在开发一个函数来返回$(&#39; .item&#39;)数组的最大总和速度+延迟。在当前示例中,它应该返回700。
像
这样的东西function sumArrayData(ar) { return maximum speed+delay for ar }
感谢您的投入。
答案 0 :(得分:2)
仅限Javascript。 您可能不需要返回整个未排序的数组。但到目前为止,这应该可以做到。 我不得不承认,实际上并不知道它是否比jquery解决方案更快,正如你提到的性能原因。
var elements = document.getElementsByClassName('item');
function maximum(e){
var arr = [];
var delay = 0;
var speed = 0;
var res = 0;
for(var i=0;i<e.length;i++)
{
speed = parseInt(e.item(i).getAttribute('data-speed'), 10);
delay = parseInt(e.item(i).getAttribute('data-delay') || 0, 10);
res = speed + delay;
arr.push(res);
}
return arr.sort(function(a, b){return b-a});
}
var myMax = maximum(elements);
alert(myMax[0]);
答案 1 :(得分:1)
这样做你想要的:
var max = Math.max.apply(Math, $('.item').map(function() {
var data = $(this).data();
return data.speed + (data.delay || 0);
}).get());
以下是example
var max = Math.max.apply(Math, Array.prototype.slice.call(document.getElementsByClassName('item')).map(function(elm) {
var data = {
speed: parseInt(elm.getAttribute('data-speed'), 10),
delay: parseInt(elm.getAttribute('data-delay'), 10)
};
return data.speed + (data.delay || 0);
}));
以下是此example。
以下是两个代码段的performance comparison。