16

配列内のすべての float を合計したい

クロムコンソールでこれを行うと

$("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

jQueryコレクションを呼び出すreturnタイプは、map別の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マップは実行されますが、これらのキーを取得している場合は、for (item in array)フィルター処理されないようです。hasOwnProperty()この場合、私が推測するロジックを自分で作成する必要があります。

于 2013-01-07T10:03:54.757 に答える