Javascript:一个项目数组的sum-all-found.data()

Javascript: sum all found .data() for an array of items

本文关键字:数组 sum-all-found data 项目数 一个 Javascript 项目      更新时间:2023-09-26

我们有一个未排序的列表。

<ul>
 <li class="item" data-speed="500" data-delay="150"></li>
 <li class="item" data-speed="700"></li>
</ul>

我正在研究一个函数,从$('.item')数组返回最大和速度+延迟。在当前示例中,它应该返回700。

类似的东西

function sumArrayData(ar) { return maximum speed+delay for ar }

感谢您的意见。

仅限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]);

这就是你想要的:

var max = Math.max.apply(Math, $('.item').map(function() {
    var data = $(this).data();
    return data.speed + (data.delay || 0);
}).get());

以下是的示例



因为您在下面的评论中要求提供一个简单的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);
}));

下面是这个例子。

以下是这两个代码片段的性能比较。