Jquery正在将prevObject:添加到数组中

时间:2013-01-07 09:53:25

标签: javascript jquery arrays

我想将数组中的所有浮点数相加

当我在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?我怎么能重构摆脱它呢?

2 个答案:

答案 0 :(得分:35)

jQuery集合上调用map的返回类型是另一个jQuery集合。如果您只想访问地图中使用的函数的结果,则需要使用.toArray()来返回基础数组:

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

答案 1 :(得分: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()进行过滤。在这种情况下,你需要自己编写逻辑。