Домашнo - Javascript - ООП task 1


0

Здравейте,

от няколко дни се мъча и явно нещо дребно бъркам в синтаксиса, защото копирайки го от w3schools сработва до някъде, ако препиша същия код 1 към 1- тотално нищо не се случва. Или не разбирам условието , или нещо пропускам. Докарах я до 50/100. Помагайте!

function solve (arr) { "use strict"; var sum = 0; if (arguments.length === 0) { return null; } if (arr === undefined) { throw "Error"; } if (Array.isArray(arr)) { for (let i = 0, len = arguments.length; i < len; i += 1) { if (isNaN(arguments[i])) { throw " "; } else { sum += +arr[i]; } } } return sum; }




Отговори



5

arguments.length дава броя на подадените на функцията аргументи. Затова for цикъла ти вероятно се завърта само един път.  Пробвай вместо това с arr.length , което би ти дало дължината на масива. 

За домашните от този курс вече има начални .js файлове, върху които да пишем решенията си. Намират се в папка tasks в на GitHub repository-то на курса. Там ще видиш че се иска solve функцията ти да връща друга функция, а не sum.

Има локални тестове, които доста помагат да се ориентира човек какво се очаква в задачите. Обяснение как да се пуснат те има тук.


от nhristova (506 точки)


0

Здравейте. И аз имам питане по тази задача.
Направих задачата с prototype, който проверява дали някой от елементите в масива е NaN. Локално при мен работи нормално и както искам, но в bgcoder не работи. 
Ако го преработя с функция работи на 100%, но все пак ми е любопитно къде греша в прототипите. Прилагам кода:

function solve() {
 return function sum(arr) {
   Array.prototype.indexOfNaN = function(){
       let i= 0, L= this.length;
       while (i < L){
           if (isNaN(this[i])) return i;
           i += 1;
       }
       return -1;
    }

    if (arr.length === 0) {
        return null;
    }
    if (arr.indexOfNaN() != -1) {
        throw Error;
    }

    arr = arr.map(x => +x);
    return arr.reduce((a, b) => a + b, 0);
 }
}


от Nikra (0 точки)