Loading...
Nikola_Andreev avatar Nikola_Andreev 671 Точки

JS Advanced - Exercises: advanced functions - 07.Monkey Patcher - Judje expected output

Здравейте !

Ситуацията е следната: Judje очевидно очаква масив, пише го в условието на задачата и по нулевите тестове също изглежда е така.

Условие: Output from the report command should be returned as a result of the function in the form of an array of three numbers and a string, as described above.

В нулевите тестове в джъдж пише това : var expected = [1, 0, 1, 'new'];

compareScore(expected, answer);

function compareScore(expected, answer) {
    expect(expected[0]).to.equal(answer[0], 'Incorrect number of upvotes');
    expect(expected[1]).to.equal(answer[1], 'Incorrect number of downvotes');
    expect(expected[2]).to.equal(answer[2], 'Incorrect score');
    expect(expected[3]).to.equal(answer[3], 'Incorrect rating');
}

Съответно аз си му връщам масив:  return output

console.log(output) = [ 1, 0, 1, 'new' ]

Всичко изглежда нормално, нали? Да ама нито един тест не минава и ми дава това като отговор:

Unexpected error: Incorrect number of upvotes: expected 1 to equal undefined

Тоест се едно в масива си на 1 ва позиция очаква 1 , а аз му връщам undefined. Същата работа е и с останалите нулеви тестове?

Edit: Не е зле и да дам решението -> https://gist.github.com/Nikola-Andreev/57f4e5860476c82607cfd01bee74162b

Тагове:
0
JavaScript Advanced 22/10/2016 12:13:58
djc_bg2015 avatar djc_bg2015 923 Точки
Best Answer

Здравей,

в условието е казано, че ще ти извикат функцията с функцията call(), която подменя контекста на this.

Аз си написах вътрешната логика, използвайки this без реално да имам самия обект вътре във функцията, но извиквайки я с call() реално джъдж ти дава въпросния this отвън.

извикване на upvote и downvote не връща нищо, при score връщам направо самия масив:

return [bla, bla];

за да запазя вътрешно състояние направих clousure.

Пример:

function solve(argument) {
    let processor = (function() {
        function upvote() {...};
        function downvote() {...};
        function score() {...};

        return {upvote, donvote, score}
    })();

    processor[argument]();
}

в случая за да запазя trhis-a го присвоих на променлива , с която го реферирах във вътршната функция.

Не знам до кокло се очаква това от нас в съответната задача, но това е моето решение.
Ако искаш да го видиш, кажи и ще ти дам линк.
Поздрави!

4
oxygen avatar oxygen 7 Точки

Това е моето решение:

http://pastebin.com/PFfruKhg

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

 

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.