jQuery正在将prevObject添加到数组中。

17

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

当我在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(not a number)。

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


换句话说,给我们展示一下 HTML 的样例。 - LarsH
2个回答

45

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

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

这将生成包含所有tr.project_hours表行的长数组。我需要将它们分开。 - Andreas Lyngstad
我明白了,这个答案更多地针对于为什么在使用jQuery.fn.map时会在结果中看到prevObject - steveukx
爱你:),你让我的一天变得美好! - Ponzio Pilato
超过3年与jQuery一起工作,直到现在才发现这个!这真的让我开心一整天! - darth0s
"JS对象转数组"; 对于Google算法来说,似乎无法将此答案与确切的搜索查询连接起来,只有在搜索"prevObject"时才会显示它。 - Robin93K

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()进行过滤。在这种情况下,我想您需要自己编写逻辑。


请参考steveukx的答案,了解jQuery添加这些属性的更好解决方案。 - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接