Javascript:总结所有找到.data()的项目数组

时间:2014-10-25 14:26:28

标签: javascript arrays sum

我们有一个无序列表。

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

感谢您的投入。

2 个答案:

答案 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


<小时/> 因为您在下面的评论中要求提供简单的JavaScript解决方案,所以我转换了脚本 你去吧:

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