Лекция 2 >ls2
Перепишите код, заменив оператор if
на тернарный оператор ?
var result;
if (a + b < 4) {
result = true;
} else {
result = false;
}
Перепишите if..else
с использованием нескольких операторов ?
.
Для читаемости — оформляйте код в несколько строк.
var message;
if (login == 'Pitter') {
message = 'Hi';
} else if (login == 'Owner') {
message = 'Hello';
} else if (login == '') {
message = 'unknown';
} else {
message = '';
}
Перепишите код, заменив оператор switch
на оператор if..else
:
switch (val) {
case 'a':
console.log( 'a' );
break;
case 'b':
case 'c':
case 'd':
case 'e':
console.log( 'others' );
break;
default:
console.log( 'unknown' );
}
Перепишите код с использованием одной конструкции switch
:
var a = 0;
if (a == 0) {
console.log( 0 );
}
if (a == 1) {
console.log( 1 );
}
if (a == 2 || a == 3) {
console.log( '2,3' );
}
Перепишите код, заменив цикл for
на while
, без изменения поведения цикла.
for (var i = 0; i < 3; i++) {
console.log(i);
}
Написать код который посчитает сумму всех элементов в масиве.
var arr = [1,2,3,4];
Внимание!
- Не разрашается использовать специальные методы массивов.
Написать код который посчитает сумму всех четных элементов в массиве.
var arr = [1,2,3,4];
Внимание!
- Не разрашается использовать специальные методы массивов.
Написать код который посчитает сумму всех четных элементов в массиве, в суммировании уча́ствуют только элементы больше 3.
var arr = [1,2,3,4];
Внимание!
- Не разрашается использовать специальные методы массивов.
Отсортировать массив по убыванию.
var arr = [1,2,3,4,5,6];
// [6,5,4,3,2,1]
Внимание!
- Не разрашается использовать специальные методы массивов.
Отсортировать массив по возрастанию.
var arr = [6,5,4,3,2,1];
// [1,2,3,4,5,6]
Внимание!
- Не разрашается использовать специальные методы массивов.
Дан массив с элементами [2, 5, 9, 15, 0, 4]
. С помощью цикла for
и оператора if
выведите на экран столбец тех элементов массива, которые больше 3-х, но меньше 10.
Внимание!
- Не разрашается использовать специальные методы массивов.
Дан массив с числами: [1,2,3,-5,-2,1,-4]
Найдите сумму положительных элементов массива. В результате вы должны получить число 7
Внимание!
- Не разрашается использовать специальные методы массивов.
Дан массив с элементами [1, 2, 5, 9, 4, 13, 4, 10]
. С помощью цикла for
и оператора if
проверьте есть ли в массиве элемент со значением, равным 4. Если есть — выведите на экран Есть!
и выйдите из цикла. Если нет - ничего делать не надо.
Дано число n=1000
. Делите его на 2 столько раз, пока результат деления не станет меньше 50. Какое число получится? Посчитайте количество итераций, необходимых для этого (итерация - это проход цикла), и запишите его в переменную num
.
Лекция 3 >ls3
Напишите функцию f
, которая возвращает куб числа. Число передается параметром. Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только число.
f(2); // 8
f('Content'); // Error: parameter type is not a Number
Напишите функцию f
которая возвращает сумму всех параметров. Количество параметров может быть любым. Данная функция должна обязательно содержать проверку входных параметров, потому что принимать она может только числа.
f(1,2,3); // 6
f(1,1,1,1,1,1,1,1); // 8
f(1,2,'s',4); // Error: all parameters type should be a Number
Сделайте функцию f
, которая отнимает от первого числа второе и делит на третье. Данная функция должна обязательно содержать проверку входных параметров, потому что принимать она может только числа.
f(9,3,2); // 3
f('s',9,3) // Error: all parameters type should be a Number
Сделайте функцию f
, которая принимает параметром число от 1 до 7, а затем возвращает день недели на русском языке. Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только числа от 1 до 7.
f(1); // Воскресенье
f(2); // Понедельник
f(8); // Error: parameter should be in the range of 1 to 7
f('1'); // Error: parameter type is not a Number
Дан массив с числами [1, 2, -4, 3, -9, -1, 7]
. Создайте из него новый массив, где останутся лежать только положительные числа [1, 2, 3, 7]
. Создайте для этого вспомогательную функцию isPositive(-3)
, которая параметром будет принимать число и возвращать true, если число положительное, и false — если отрицательное. Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только число.
Для добавление нового элемента в конец массива используйте метод push
// Пример использования функции isPositvie()
isPositive(-3) // вернет false
isPositive(3) // вернет true
isPositive('s') // Error: parameter type is not a Number
// Пример использования метода push
var arr = [8];
arr.push(2);
console.log(arr[1]); // выведет число 2
Сделайте функцию isEven()
, которая параметром принимает целое число и проверяет: чётное оно или нет. Если чётное — функция возвращает true
, если нечётное — false
. Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только число.
Чётные числа могут делится на 2 без остатка.
isEven(3); // false
isEven(4); // true
isEven('Content'); // Error: parameter type is not a Number
Сделайте функцию getDivisors
, которая параметром принимает число и возвращает массив его делителей (чисел, на которое делится данное число начиная от 1 и заканчивая самим собой). Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только число больше 0.
getDivisors(12); // [1, 2, 3, 4, 6, 12]
getDivisors('Content'); // Error: parameter type is not a Number
getDivisors(0); // Error: parameter can't be a 0
Дан массив с числами [1, 2, 3]
. Создайте функцию f
, которая принимает данный массив в качестве параметров, а затем последовательно выводит на экран его элементы. Обязательно нужно использовать рекурсию. Использовать цикл запрещено. Данная функция должна обязательно содержать проверку входного параметра, потому что принимать она может только не пустой массив.
Возможно вам понадобится метод splice.
f([1,2,3]);
// 1
// 2
// 3
f(1,2,3) // Error: parameter type should be an array
f('Content') // Error: parameter type should be an array
f([]) // Error: parameter can't be an empty
Лекция 4 >ls4
Создать имплементацию функции forEach
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
const arr = [1,2,3];
forEach(arr, function(item, i, arr) {});
Создать имплементацию функции filter
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
const arr = [1,2,3];
filter(arr, function(item, i, arr) {});
Создать имплементацию функции every
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
const arr = [1,2,3];
every(arr, function(item, i, arr) {});
Создать имплементацию функции some
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
const arr = [1,2,3];
some(arr, function(item, i, arr) {});
Создать имплементацию функции reduce
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
- Третий параметр обязателен и может принимать только строку или число
const arr = [1,2,3];
const acc = 0;
reduce(arr, function(acc, item, i, arr) {}, acc);
Создать имплементацию функции reduceRight
, логика работы такая же как и у родного метода.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Второй параметр обязателен и может принимать только функцию
- Третий параметр обязателен и может принимать только строку или число
const arr = [1,2,3];
const acc = 0;
reduceRight(arr, function(acc, item, i, arr) {}, acc);
Код ниже получает из массива строк новый массив, содержащий их длины:
var arr = ['abcd', 'abcde', 'ab', 'abc'];
var arrLength = [];
for (var i = 0; i < arr.length; i++) {
arrLength[i] = arr[i].length;
}
console.log( arrLength ); // 4,5,2,3
Перепишите выделенный участок:
- используйте вместо цикла
for
методmap
Напишите функцию f
. Данная функция принимает один параметр: одноуровневый или многоуровневый массив. Возвращает данная функция сумму всех элементов на всех уровнях.
Обратите внимание что функция должна возвращать число 0, если при проходе всех уровней не было найдено ни одного числа.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Генерировать ошибку если на каком то уровне было найдено не число и не массив
const arr = [[[1, 2], [1, 2]], [[2, 1], [1, 2]]];
f(arr); // 12
const arr2 = [[[[[1,2]]]]];
f(arr2); // 3
const arr3 = [[[[[1,2]]],2],1];
f(arr3); // 6
const arr4 = [[[[[]]]]];
f(arr4); // 0
const arr5 = [[[[[],3]]]];
f(arr5); // 3
Сделайте функцию arrayFill
, которая будет заполнять массив заданными значениями. Первым параметром функция принимает значение, которым заполнять массив, а вторым — сколько элементов должно быть в массиве.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только число, строку, объект, массив
- Второй параметр обязателен и может принимать только число
arrayFill('x',5); // [x,x,x,x,x]
Создать имплементацию функции reverse
, которая принимает массив в качестве параметра, а возвращает массив только в обратном порядке.
Функция должна содержать проверки:
- Первый параметр обязателен и может принимать только массив
- Генерировать ошибку если был передан пустой массив
const arr = [3,2,1];
reverse(arr); // [1,2,3]
Лекция 5 >ls5
Напишите свою имплементацию функции bind
Принимает такие параметры:
- Первый параметр — функция которую мы хотим привязать
- Второй параметр — ссылка на this
- Третий параметр до ...n — параметры для функции которую мы хотим привязать
Пример вызова:
const obj = {
getName: function(message) {
return `${message}: ${this.name}`;
}
};
const getName = obj.getName;
const f = bind(getName, {name: 'Pitter'}, 'My name');
console.log(f()); // My name: Pitter
Напишите свою имплементацию функции mix
. Данная функция принимает неограниченное количество аргументов.
Каждый аргумент по своему типу должен быть функцией иначе генерировать ошибку. Функция mix
запускает свои callback функции последовательно.
В качестве параметра каждый callback принимает то что возвращает предыдущий callback. Первый сallback не принимает параметров.
Пример вызова:
mix(() => {
return 0;
}, (prev) => {
return prev + 1;
}, (prev) => {
return prev * 2;
}) // 2
Улучшите свою имплементацию функции mix
. Если на каком то из уровней callback сгенерировал ошибку → отловите ее, а затем перейдите на следующий callback.
Функция mix
всегда должна возвращать объект в котором будет 2 поля errors
и value
.
Обратите внимание что value
содержит результат вызовов всех функций, а errors
содержит массив с информацией про все ошибки а также индекс callback где он сгенерировался.
Пример вызова:
mix(() => {
return 0;
}, (prev) => {
return prev + 1;
}, (prev) => {
throw new RangeError('Range is wrong');
}, (prev) => {
return prev * 3;
});
// Функция вернет
{
errors: [{
name: 'RangeError',
message: 'Range is wrong',
stack: 'Стек вызовов'
}],
value: 3
}
Написать свою имплементацию функции compose
. Функция принимает неограниченное количество параметров.
Каждый аргумент должен быть функцией.
Каждый аргумент принимает 1 параметр. Функция compose
возвращает другую функцию с одним параметром.
Суть работы функции compose
отображает данная формула compose(f, g)(x) = f(g(x))
Пример вызова:
compose((str) => {
return str + 'c';
}, (str) => {
return str + 'b';
})('a'); // 'abc'
Лекция 6 >ls6
-.-.-...