игнорирование пустых строк при циклическом просмотре массива в JavaScript - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь просмотреть массив и сложить все числа. Я использовал console.log, чтобы показать мне, какие значения использовал скрипт, как показано ниже. Я продолжаю пробовать разные варианты вещей в if(), но, похоже, ничего не работает должным образом.

    var billycount = 0;
    var billyTotalScore = billyScoreList.reduce(function(score, total) {
        if(score === " ") {
        billycount += 1;
        }
        return +total + +score; 
    });
    console.log(billycount); //0
    console.log(billyTotalScore); //30
    console.log(billyScoreList); // ["12", " ", "18"]
    console.log(billyAverageScore) //10

    var billyAverageScore = billyTotalScore/(billyteamlist.length - billycount);

Ответ на billyAverageScore должен равняться 15 (30/2).

Я пытался if(score === "0"), который дает мне те же ответы, что и выше, и if (score !== true), который дает мне счет 2 и среднее значение 30. Я думаю, что reduce() рассматривает пустую строку как 0. Я хочу быть в состоянии сосчитать все пустые строки, чтобы я мог сбрасывать их со счетов при нахождении среднего.

Я боролся с этим вечно и чувствую, что мне не хватает одной ключевой концепции. Любая помощь будет отличной! Спасибо!

UPDATE:

Для тех, кто сталкивается с этим, вот код, который я получил, чтобы работать.

var billycount = 0;
    var billyTotalScore = billyScoreList.reduce(function(total, score) {
        if (score === " " || total === " ") {
        billycount++;   
        }
        return +total + +score; 
    });

    var billyAverageScore = billyTotalScore/(billyteamlist.length - billycount);

Когда я просто проверял if (score === " "), я забыл, что оценка никогда не будет равна первому члену в массиве. Я просто добавил || total === " ". единственный раз, когда это сломалось бы, было бы, если бы первый элемент был "", а второй элемент был 0. Я хотел бы billycount ++ для первого элемента, но не для второго. Надо еще подумать.

1 Ответ

2 голосов
/ 28 февраля 2012

Функция обратного вызова reduce должна быть function(total, score) вместо function(score, total).

см. MDN :

previousValue
    The value previously returned in the last invocation of the callback, or initialValue, if supplied. (See below.)
currentValue
    The current element being processed in the array.
...