16

我想对数组中的所有浮点数求和

当我在 chrome 控制台中执行此操作时

$("tr.project_hours").find("td.number").map(function(i,v)
{return parseFloat($(v).attr("data-time"))
})

我明白了

[0, 0, 0, 0, 0, 0, 0]

这就是我要的

但是,在我的代码中,我有更多 $("tr.project_hours") ,我想分别对它们求和。所以,我愿意

$("tr.project_hours").each(function(){
    row = $(this).find('td.total')
    row.html(sumInputsIn($(this).find("td.number").map(function(i,v){
     return parseFloat($(v).attr("data-time"))})));
    })

('td.total') 是应显示结果的列。问题是最后一个代码在控制台中返回这个

[0, 0, 0, 0, 0, 0, 0, prevObject: jQuery.fn.jQuery.init[7], context: <tr>]

所以结果就是臭名昭著的NaN。

为什么我会在我的数组中获得 prevObject?我该如何重构以摆脱它?

4

2 回答 2

41

调用mapjQuery 集合的返回类型是另一个 jQuery 集合。如果您只想访问映射中使用的函数的结果,则需要使用.toArray()来返回底层数组:

var numbersArray = $("tr.project_hours").find("td.number").map(function(i,v)
  {return parseFloat($(v).attr("data-time"))
}).toArray();
于 2013-01-07T10:04:04.363 回答
1

这应该会实现预期的结果:

$("tr.project_hours").each(function(index, element) {
    var row = $(this).find('td.total');
    var total = 0;
    $(this).find("td.number").each(function (index, element) {
        total += parseFloat($(v).attr("data-time"));
    });
    row.html(total);
});

如果您获得这些键, jQuery map显然for (item in array)不会过滤。hasOwnProperty()在这种情况下,我猜你需要自己编写逻辑。

于 2013-01-07T10:03:54.757 回答