Grundläggande programmering (1DV021)
MyMoodle(CoursePress)
  • Introduktion
  • Studieanvisningar
  • Föreläsningar
    • Introduktion
    • Föreläsning 1
    • Föreläsning 2
    • Föreläsning 3
    • Föreläsning 4
    • Föreläsning 5
    • Föreläsning 6
    • Föreläsning 7
    • Föreläsning 8
  • Videologgar
  • Guider
    • Ditt alldeles egna GitHub-konto
    • Meddela kursledningen ditt användarnamn på GitHub
    • Programvaror
      • Git - versionshantering
      • Node.js - applikationsmiljön
      • Visual Studio Code - utvecklingsverktyg
    • Så kommer du igång med ditt repo för övningsuppgifterna
    • Att komma igång med en övningsuppgift
    • Arbetsgång med en övningsuppgift
  • Övningsuppgifter
    • Del 1
      • A-nivå
        • Hello, World!
        • Enkel addition
        • Inför futtiga funktioner
        • Futtiga funktioner
        • Rätvinklig triangel
        • Bestäm datatypen
        • Knivskarp HTML
        • Additionell kopia av array
        • Sorterad kopia av array
        • Subjektiv sortering av objekt
      • B-nivå
        • Buggig kod
        • Bättre än Svensson
        • Reducerad array
      • C-nivå
        • Kulramen
        • Harshadtal
        • Reducerad array med objekt
        • De bästa av de bästa
    • Del 2
      • A-nivå
        • Legotillverkaren
        • Konstruktiv prototyp av ellips
        • Ny klassisk ellips
  • Examinationsuppgifter
    • Om
      • Praktisk examinationsuppgift
      • Muntlig examination
    • 1 - Beskrivande statistik
    • 2 - Tjugoett
  • Nedläggning
Powered by GitBook
On this page
  • Uppgift
  • Funktioner
  • getFrequenciesOfNames
  • getMostFrequentNames
  • sortNamesAscending
  • getNamesOfWinners
  • Tips
  1. Övningsuppgifter
  2. Del 1
  3. C-nivå

De bästa av de bästa

PreviousReducerad array med objektNextDel 2

Last updated 6 years ago

C-nivå, , .

VIKTIGT! Innan du börjar arbeta med övningsuppgiften är det viktigt att du följer guiden för att lägga till övningsuppgiftens repo till ditt repo för övningsuppgifter.

Uppgift

Hämta hem övningsuppgiftens repo och lägg tillen .gitignore-fil. Öppna filen winner.js och komplettera funktionerna getFrequenciesOfNames, getMostFrequentNames och sortNamesAscending.

I denna uppgift finns fyra funktioner varav du ska komplettera tre av dem. Den fjärde är tänkt att i slutändan anropa de tre tidigare för att få ett slutresultat.

Bland kursledarna finns en återkommande tävling där vinnarens namn i varje omgång läggs in i en array.

// Exempel
['mats', 'John', 'john', 'Johan', 'Jacob']

Själva applikationen går ut på att utifrån en liknande array avgöra antalet förekomster av varje namn, sedan flitrera ut de namn med flest förekomster för att avgöra vinnaren/vinnarna och presentera dessas namn i en array som sorterats i bokstavsordning.

För att lösa detta problem används alltså fyra olika funktioner, varav tre behöver kompletteras. Samtliga funktionen ska vara så kallade "pure functions", d.v.s. vara helt utan sidoeffekter.

Funktioner

getFrequenciesOfNames

Funktionen analyserar en array och försöker avgöra förekomsten av namnen ("case-insensitiv" - d.v.s. stor eller liten bokstav i början av namnet ska inte spela roll). Resultatet ska vara på en viss form vilket framgår av kommentarerna i koden. Uppbyggnaden av objekten kan vara lite konstig då namnen används som nyckel. Det är dock för att förenkla programmeringen i uppgiften då det handlar om hantering av en frekvenstabell.

Du ska även implementera viss felhantering, innebärande att undantag kastas om fel inträffar. Om argumentet som skickas till funktionen inte är av typen Array som enbart innehåller strängar ska ett undantag av typen TypeError kastas med meddelandet The argument passed must be an array of strings..

const winner = require('./src/winner')

let obj = winner.getFrequenciesOfNames(['mats', 'John', 'john', 'Johan', 'Jacob'])

// obj should be:
// { mats: 1, john: 2, johan: 1, jacob: 1 }

getMostFrequentNames

Funktionen tar ett objekt i samma form som funktionen getFrequenciesOfNames returnerar, sorterar denna och returnerar en array innehållande de namn som förekommer flest gånger.

const winner = require('./src/winner')

let obj = { mats: 1, john: 2, johan: 1, jacob: 1 }

let arr = winner.getMostFrequentNames(obj)

// arr should be:
// ['john']

sortNamesAscending

Tar en array med strängar och sorterar i stigande ordning.

const winner = require('./src/winner')

let source = ['john', 'johan', 'jacob']
let arr = winner.sortNamesAscending(source)

// arr should be:
// ['jacob', 'johan', 'john']

getNamesOfWinners

Funktionen fungerar och kommer att ge gröna tester när du väl implementerat de tre funktionerna ovan.

Tips

Genom att köra testerna som kommer med övningsuppgiften kan du undersöka om koden du skrivit löst uppgiften (i alla fall enligt testet...).

Funktioner, metoder, etc. som kan komma till användning beroende hur du väljer att lösa uppgiften.

repo
lösningsförslag
Att komma igång med en övningsuppgift
Array.isArray
Array.every
Array.filter
Array.reduce
Array.slice
Array.sort
Math.max
Object.keys
Object.values
String.toLowerCase