Funkcionální zpracování dat

Funkcionální zpracování dat

1. Funkcionální jednohubky

Vytvořte si obyčejnou stránku s JavaScriptem a zkopírujte si do ní následující pole dat. Budeme s nimi pracovat v následujících cvičeních.

const numbers = [15, 6, 70, 41, 33, 27, 8, 16, 98, 60, 56];
const names = ['Petr', 'Jana', 'Pavel', 'Zuzana', 'Eva', 'Adam', 'Onyx'];
const osoby = [
  { name: 'Petr', age: 16, gender: 'male' },
  { name: 'Jana', age: 8, gender: 'female' },
  { name: 'Pavel', age: 34, gender: 'male' },
  { name: 'Zuzana', age: 41, gender: 'female' },
  { name: 'Eva', age: 13, gender: 'female' },
  { name: 'Adam', age: 22, gender: 'male' },
  { name: 'Adam', age: 22, gender: 'male' },
  { name: 'Onyx', age: 37, gender: 'intersex' },
];
  1. Napište cyklus, který spočítá průměr čísel v poli numbers. Napište tento cyklus ve staré formě for a v nové formě forEach.
  2. Pomocí funkce forEach napište cyklus, který vypíše do konzole poslední písmeno z každného jména v poli names.
  3. Pomocí metody map vydělte všecha čísla v poli numbers třemi.
  4. Pomocí metody map převeďte všechna čísla v poli numbers na řetězce.
  5. Pomocí metody map vytvořte pole, ve kterém budou všechna jména z pole names zabalená do li tagu. Jméno Petr tak dopadne jako <li>Petr</li>.
  6. Použijte pole osoby a pomocí metody map vytvořte pro každou osobu email ve formátu petr@gmail.com.
  7. Pomocí metody filter získejte z pole numbers pouze ta čísla, která jsou sudá.
  8. Pomocí metody filter získejte z pole names pouze ta jména, která jsou delší než 4 znaky.
  9. Pomocí metody filter získejte z pole osoby pouze dospělé lidi.
  10. Pomocí metody filter získejte z pole osoby pouze dospělé muže.
  11. Pomocí metody some zjistěte, jestli jsou v poli numbers nějaká čísla dělitelná 11.
  12. Pomocí metody every zjistěje, jestli v poli osoby platí, že každá osoba je vždy buď muž nebo žena.

Řešení

'use strict';

const numbers = [15, 6, 70, 41, 33, 27, 8, 16, 98, 60, 56];
const names = ['Petr', 'Jana', 'Pavel', 'Zuzana', 'Eva', 'Adam', 'Onyx'];
const osoby = [
  { name: 'Petr', age: 16, gender: 'male' },
  { name: 'Jana', age: 8, gender: 'female' },
  { name: 'Pavel', age: 34, gender: 'male' },
  { name: 'Zuzana', age: 41, gender: 'female' },
  { name: 'Eva', age: 13, gender: 'female' },
  { name: 'Adam', age: 22, gender: 'male' },
  { name: 'Adam', age: 22, gender: 'male' },
  { name: 'Onyx', age: 37, gender: 'intersex' },
];

// 1
let soucet = 0;
for (let i = 0; i < numbers.length; i++) {
  soucet += numbers[i];
}
const prumer = soucet / numbers.length;
console.log(prumer);

let soucet2 = 0;
numbers.forEach((number) => {
  soucet2 += number;
});
const prumer2 = soucet2 / numbers.length;
console.log(prumer2);

// 2
names.forEach((name) => {
  console.log(name[name.length - 1]);
});

// 3
const vydelTremi = numbers.map((number) => {
  return number / 3;
});

console.log(vydelTremi);

// 4
const jakoRetezce = numbers.map((number) => {
  return String(number);
});

console.log(jakoRetezce);

// 5
const namesList = names.map((name) => {
  return `<li>${name}</li>`;
});
console.log(namesList);

// 6
const emaily = osoby.map((osoba) => {
  return `${osoba.name.toLowerCase()}@gmail.com`;
});
console.log(emaily);

// 7
const sudaCisla = numbers.filter((number) => {
  if (number % 2 === 0) {
    return true;
  }

  return false;
});

console.log(sudaCisla);

// 8
const jmenaDelsiNez4 = names.filter((name) => {
  if (name.length > 4) {
    return true;
  }

  return false;
});
console.log(jmenaDelsiNez4);

// 9
const dospeli = osoby.filter((osoba) => {
  if (osoba.age >= 18) {
    return true;
  }

  return false;
});
console.log(dospeli);

// 10
const dospeliMuzi = osoby.filter((osoba) => {
  if (osoba.age >= 18 && osoba.gender === 'male') {
    return true;
  }

  return false;
});
console.log(dospeliMuzi);

// 11
const obsahujeDelitelne11 = numbers.some((number) => {
  if (number % 11 === 0) {
    return true;
  }

  return false;
});

console.log(obsahujeDelitelne11);

const kazdyBudMuzNeboZena = osoby.every((osoba) => {
  if (osoba.gender === 'male' || osoba.gender === 'female') {
    return true;
  }

  return false;
});

console.log(kazdyBudMuzNeboZena);

2. Úkolníček

Založte si JavaScriptový program a vložte do něj následujicí datovou strukturu představující seznam úkolů. Každý objekt obsahuje tyto položky

  • name - název úkolu,
  • due - za jak dlouho má být úkol splněn,
  • notify - jako dlouho předem se má úkol připomenout,
  • done - jestli už byl úkol splněn.

Nad datovou strukturou uvedenou výše proveďte následující úkony.

  1. Vytvořte pole, které obsahuje pouze názvy všech úkolů.
  2. Vytvořte pole, které obsahuje objekty pouze těch úkolů, které již byly splněny.
  3. Vytvořte pole, které obsahuje objekty pouze těch úkolů, které mají být splněný během následujících tří dnů.
  4. Máme-li pole úkolů, které mají být splněny do tří dnů, zjistěte, zda jsou všechny úkoly z tohoto seznamu již splněny.

Řešení

'use strict';

const tasks = [
  {
    name: 'Vyprat košile',
    due: {
      time: 3,
      unit: 'day',
    },
    notify: {
      time: 1,
      unit: 'day',
    },
    done: false,
  },
  {
    name: 'Nakoupit na nedělní oběd',
    due: {
      time: 2,
      unit: 'day',
    },
    notify: {
      time: 6,
      unit: 'hour',
    },
    done: false,
  },
  {
    name: 'Zopakovat si funkce vyšších řádů',
    due: {
      time: 8,
      unit: 'hour',
    },
    notify: {
      time: 30,
      unit: 'minute',
    },
    done: true,
  },
  {
    name: 'Dát výpověď v práci',
    due: {
      time: 14,
      unit: 'day',
    },
    notify: {
      time: 4,
      unit: 'day',
    },
    done: false,
  },
  {
    name: 'Jít si zaběhat',
    due: {
      time: 2,
      unit: 'day',
    },
    notify: {
      time: 1,
      unit: 'hour',
    },
    done: true,
  },
];

// 1
const nazvyUkolu = tasks.map((task) => {
  return task.name;
});

console.log(nazvyUkolu);

// 2
const splneneUkoly = tasks.filter((task) => {
  return task.done;
});

console.log(splneneUkoly);

// 3
const do3Dnu = tasks.filter((task) => {
  if (task.due.unit === 'day' && task.due.time <= 3) {
    return true;
  }

  if (task.due.unit === 'hour' && task.due.time <= 3 * 24) {
    return true;
  }

  return false;
});

console.log(do3Dnu);

// 4
const jeVseDo3DnuSplnene = do3Dnu.every((task) => {
  return task.done;
});

console.log(jeVseDo3DnuSplnene);