Подтвердить что ты не робот

JQuery добавляет prevObject: к массиву

Я хочу суммировать все поплавки в массиве

когда я делаю это на консоли хром

$("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 в моем массиве? И как я могу реорганизовать, чтобы избавиться от него?

4b9b3361

Ответ 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(), если вы получаете эти ключи. В этом случае вам нужно написать логику, я думаю.

Ответ 2

Возвращаемым типом вызова map в коллекции jQuery является другая коллекция jQuery. Если вы хотите получить доступ только к результатам функции, используемой на карте, вам нужно использовать .toArray(), чтобы вернуть базовый массив:

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