我想将数组中的所有浮点数相加
当我在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?我怎么能重构摆脱它呢?
答案 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()
进行过滤。在这种情况下,你需要自己编写逻辑。