Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Задача School Register от JS Fundamentals - Objects and Classes - More Exercises

Здравейте, хора! 

Моля за градивен фийдбек относно кода ми - в judge  е 100/100, но изглежда ужасно, функцията ми е много дълга (не се чувствам уверена да си разбивам кода на по - малки функции все още), със сигурност може да се съкрати или поне да изглежда по-добре, да е по-четим. Все пак искам някой ден да работя и с други хора и те да разбират лесно бозата ми :Д

Ето вижте: 

https://pastebin.com/JRsELENa

Тук е задачата, 3та поред: 

https://softuni.bg/trainings/resources/officedocument/41049/more-exercise-js-fundamentals-may-2019/2343

1
Programming Fundamentals 27/07/2019 17:07:26
willystyle avatar willystyle 2472 Точки

Ето едно предложение за рефактор:

function studentsRegister(arr) {
    let schoolRegister = {};
    for (let line of arr) {
        let tokens = line.split(', ');
        let grade = Number(tokens[1].split(': ')[1]) + 1;
        let name = tokens[0].split(': ')[1];
        let score = Number(tokens[2].split(': ')[1]);
        if (score > 3) {
            let student = {name, score};
            if (!schoolRegister.hasOwnProperty(grade)) {
                schoolRegister[grade] = [];
            }
            schoolRegister[grade].push(student);
        }
    }
    let sortedGrades = Object.keys(schoolRegister).sort((a,b) => a - b);
    for (let grade of sortedGrades) {
        let students = schoolRegister[grade];
        console.log(`${grade} Grade`);
        console.log(`List of students: ${students.map(s => s.name).join(', ')}`);
        console.log(`Average annual grade from last year: ${average(students.map(s => s.score)).toFixed(2)}`);
        console.log();
    }

    function average(arr) {
        return arr.reduce((a, b) => a + b, 0) / arr.length;
    }
}

 

1
Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Супер! Много благодаря. На 25ти ред във функцията за average, arr е students предполагам? Въпреки че минах лекцията за функции, са ми твърде абстрактни все още.

0
willystyle avatar willystyle 2472 Точки

функцията average е стандартна взета от stackoverflow например за пресмятане на средна стойност на масив. При извикването и подаваме масива students но mapnat, за да не e масив от обекти student, a масив от техните оценки student.score.

0
BorislavAG avatar BorislavAG 1 Точки

Ето и моето решение на задачата.
 

function sortRegister(arr) {
	let register = {};
	for (const line of arr) {
		const tokens = line.split(' ');
		const studentName = tokens[2].slice(0, tokens[2].length - 1);
		const stundentGrade = Number(tokens[4].slice(0, tokens[4].length - 1));
		const graduatedWithAverage = Number(tokens[tokens.length - 1]);

		if (graduatedWithAverage >= 3) {
			if (!register.hasOwnProperty(stundentGrade)) {
				register[stundentGrade] = {
					name: [studentName],
					average: [graduatedWithAverage],
				};
			} else {
				register[stundentGrade].name.push(studentName);
				register[stundentGrade].average.push(graduatedWithAverage);
			}
		}
	}
	for (const grade in register) {
		const student = register[grade]
		console.log(`${Number(grade) + 1} Grade`);
		console.log(`List of students: ${student.name.join(', ')}`);
		const averageNote = student.average.reduce((a,b) => a + b) / student.average.length
		console.log(`Average annual score from last year: ${averageNote.toFixed(2)}`);
		console.log(" ");
	}
}

 

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