[JS Frameworks] Домашно Underscore.JS


5

Link: http://pastebin.com/piUVNr5X

На повечето места може да се използва _.chain(), но на мен ми беше по-лесно така да дебъгвам. Качвайте и други варианти, защото задачите предразполагат към различни решения :)

На последната опитах да използвам въпросния _.invert(), но преди това трябва да използвам _.max(), за да достъпя съответното поле. Някой друг, ако е измислил нещо по-хитро да споделя :)

p.S. OOP-то може да се пооправи, но това по-късно 




Отговори



0

Ето го и моето решение

Изобщо не ми се случва често да си напиша домашното толкова рано преди крайния срок :D Много ще се радвам на всякакви забележки и коментари.

Използвала съм библиотеката ChanceJS, която колегата nzhul беше споделил преди няколко дни, много ме улесни. Този път реших да сложа всички задачи в един файл, но се постарах да са четими и лесни за проверка.


от lina94 (399 точки)


1
Последните две задачи (най-популярния автор и най-срещаното име) могат да се решат с една фунцкия. Аз намерих три варианта да се направи:
 

	
function getMostCommonProperty(objects, prop) {
    var groupsByProp = _.groupBy(objects, prop);
    return _.max(groupsByProp, function (gr) {
        return gr.length;
    })[0][prop];
} 

function getMostCommonProperty(objects, prop) { var groupsByPropCount = _.countBy(objects, prop); var maxCount = _.max(groupsByPropCount); return _.invert(groupsByPropCount)[maxCount]; }
function getMostCommonProperty(objects, prop) { var groupsByPropCount = _.countBy(objects, prop); var pairs = _.pairs(groupsByPropCount); return _.max(pairs, _.last)[0]; }
 
В първия вариант се групира по свойството (prop) и се намира групата с най-много елементи. От нея се взима първия и се връща свойството. Във втория и третия вариант се групира директно по брой обекти с това свойство, но после трябва да се конвертират групите или към масиви (_.pairs) или да се обърне ключ/стойност (_.invert), и така да се  вземе свойството. Ето как може да се използват:
 
var topAuthor = getMostCommonProperty(books, 'author');
var topFirstName = getMostCommonProperty(people, 'fname');

 


от neutrino (3376 точки)


1
Едно решение с подобрен UI :)
http://jsfiddle.net/stoianpp/C67Qk/
Необходимо е от option менюто да се избере "No wrap - in " вместо "on load", за да зареди require, след това "Run" бутона и после ... се стартира изпълнение на отделните задачки с бутоните.

от stoianpp (415 точки)


0
Ето линк към моите решения:
https://github.com/Ross93/UnderScoreJS.git
На шеста и седма задача използвам _.invert за взимане на най-често срещаният key и value. За намиране на общия брой крака използвам метода reduce(). Останалите задачи са с добре познатите ни методи sortBy(), groupBy(), each() и filter().

от rosica.boykova (1193 точки)


6

Аз реших да си припомня някои неща от изминалите курсове и направих едно SPA сайтче с всички задачи в него. 

Демо Код


от Nikolay_Radkov (2911 точки)


0

Харесах идеята на колегата  и реших и аз да се поупражня с няколко библиотеки и повече файлове. Убих няколко часа, но мисля, че се получи адекватна презентация на всяка от задачите:

DEMO | SOURCE

Разликата е, че си усложних работата, като използвам три отделни темплейта за всеки от трите типа задачи – за студенти, за животни и за хора. Отначало реших да пробвам без jQuery. Евентите на select таговете, които да следят за промяна на селектираната опция в select-ите, обаче се оказаха доста сложни без jQuery, и след като си поблъсках стабилно главата, реших да не се правя на герой и в крайна сметка добавих и jQuery.

Впрочем, пробвах нещо с document.querySelector('#theSelectTag option:selected') да хвана option елемент-а в select, който е избран, обаче това гърми с Invalid argument blabla, и се оказа, че не ми дава в аргумента на querySelector() да използвам ":selected"?! Така и не успях да го нагодя, но и из нета никъде не попаднах на решение – навсякъде където някой се е сблъскал с това, са му отговорили с jQuery.


от varbanoff (2325 точки)


0

Ето и едно решение от мен https://github.com/idoychinov/Telerik_Academy_Homework/tree/master/JS%20Applications/2.UnderscoreJS

Поиграх си малко докато направя последните две задачи да връщат масив от резултати в случай, че има повече от един автор или повече от едно име които са еднакво популярни/разпространени.


от ivand (862 точки)