Skip to content

Commit b1b3fe7

Browse files
committed
[TM-9.9/st-compl] training-module
Solving 10 tasks. Working with "for/for...of(), while(), for...in()". Worth noting: - all this tasks (alternative solutions). FS-dev: B-3 / JS basic
1 parent a9b43f3 commit b1b3fe7

File tree

1 file changed

+318
-0
lines changed
  • full-stack-dev/3-js-basic/9-cycles/9-9-training-module

1 file changed

+318
-0
lines changed
Lines changed: 318 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,318 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// Напишите функцию для подсчета количества четных чисел в массиве с использованием цикла for.
5+
6+
const numbers1 = [2, 7, 4, 9, 6, 1, 8];
7+
const numbers2 = [1, 3, 5, 7, 9];
8+
9+
function getEvenNum(arr) {
10+
// ! такой проверки достаточно, т.е. не нужно "тогда" указывать по умолчанию [] и добавлять !arr
11+
if (!Array.isArray(arr)) {
12+
return 0; // некорректные входящие данные
13+
}
14+
15+
let evenCount = 0;
16+
17+
for (let i = 0; i < arr.length; i++) {
18+
if (arr[i] % 2 === 0) {
19+
evenCount++;
20+
}
21+
}
22+
23+
return evenCount;
24+
}
25+
26+
console.log(getEvenNum(numbers1)); // 4
27+
console.log(getEvenNum(numbers2)); // 0
28+
console.log(getEvenNum('')); // 0
29+
30+
// Задание 2:
31+
// Напишите функцию для поиска первого элемента в массиве, который больше заданного порогового значения.
32+
33+
let numbers3 = [5, 12, 3, 45, 8, 22];
34+
let threshold = 20;
35+
36+
function getOverNum(arr, threshold) {
37+
if (!Array.isArray(arr)) {
38+
return null; // некорректные входящие данные
39+
}
40+
41+
if (!threshold || typeof threshold !== 'number') {
42+
return null; // некорректные входящие данные
43+
}
44+
45+
for (const num of arr) {
46+
if (num > threshold) {
47+
return num;
48+
}
49+
}
50+
51+
return null; // элемент не найден
52+
}
53+
54+
console.log(getOverNum(numbers3, threshold)); // 45
55+
56+
// Задание 3:
57+
// Напишите функцию для вывода всех элементов двумерного массива построчно с использованием вложенных циклов.
58+
59+
let matrix = [
60+
[1, 2, 3],
61+
[4, 5, 6],
62+
[7, 8, 9],
63+
];
64+
65+
// function outputMatrixNum(matrix) {
66+
// if (!Array.isArray(matrix)) {
67+
// return ''; // некорректные входящие данные
68+
// }
69+
//
70+
// for (let i = 0; i < matrix.length; i++) {
71+
// let outputStr = '';
72+
// for (let j = 0; j < matrix[i].length; j++) {
73+
// inputStr += `${matrix[i][j]} `;
74+
// }
75+
//
76+
// console.log(outputStr.slice(0, -1));
77+
// }
78+
// }
79+
80+
// ?? альтернативное решение (один цикл, никаких конкатенаций)
81+
function outputMatrixNum(matrix) {
82+
if (!Array.isArray(matrix)) {
83+
return ''; // некорректные входящие данные
84+
}
85+
86+
for (let i = 0; i < matrix.length; i++) {
87+
console.log(matrix[i].join(' '));
88+
}
89+
}
90+
91+
outputMatrixNum(matrix);
92+
/*
93+
1 2 3
94+
4 5 6
95+
7 8 9
96+
*/
97+
98+
// Задание 4:
99+
// Напишите функцию для подсчета суммы всех элементов массива с использованием цикла while.
100+
101+
// function getArrSum(arr) {
102+
// if (!Array.isArray(arr)) {
103+
// return null; // некорректные входящие данные
104+
// }
105+
//
106+
// let length = arr.length - 1;
107+
// let sum = 0;
108+
//
109+
// while (length >= 0) {
110+
// sum += arr[length];
111+
// length--;
112+
// }
113+
//
114+
// return sum;
115+
// }
116+
117+
// ?? альтернативное решение (чаще встречающийся паттерн)
118+
function getArrSum(arr) {
119+
if (!Array.isArray(arr)) {
120+
return null; // некорректные входящие данные
121+
}
122+
123+
let index = 0;
124+
let sum = 0;
125+
126+
while (index < arr.length) {
127+
sum += arr[index];
128+
index++;
129+
}
130+
131+
return sum;
132+
}
133+
134+
console.log(getArrSum([3, 7, -2, 15, 8])); // 31
135+
console.log(getArrSum([10, -5, 20, 0])); // 25
136+
137+
// Задание 5:
138+
// Напишите функцию для поиска максимального элемента в массиве с использованием цикла for...of.
139+
140+
function getHigherNum(arr) {
141+
if (!Array.isArray(arr) || arr.length < 1) {
142+
return null; // некорректные входящие данные
143+
}
144+
145+
let higherNum = arr[0];
146+
147+
for (const num of arr) {
148+
if (num > higherNum) {
149+
higherNum = num;
150+
}
151+
}
152+
153+
return higherNum;
154+
}
155+
156+
console.log(getHigherNum([12, 45, 3, 67, 23, 8])); // 67
157+
console.log(getHigherNum([-5, -12, -3, -20, -1])); // -1
158+
159+
// Задание 6:
160+
// Напишите функцию для подсчета количества отрицательных чисел в двумерном массиве с использованием вложенных циклов.
161+
162+
function countNegativeNum(arr) {
163+
if (!Array.isArray(arr)) {
164+
return 0; // некорректные входящие данные
165+
}
166+
167+
let count = 0;
168+
169+
for (const subArr of arr) {
170+
if (!Array.isArray(subArr)) {
171+
continue; // продолжение.. исключение ошибки, если вложенность не []
172+
}
173+
174+
for (const num of subArr) {
175+
if (num < 0) {
176+
count++;
177+
}
178+
}
179+
}
180+
181+
return count;
182+
}
183+
184+
console.log(
185+
countNegativeNum([
186+
[5, -3, 8],
187+
[-12, 0, 7],
188+
[15, -9, -1],
189+
])
190+
); // 4
191+
console.log(
192+
countNegativeNum([
193+
[10, 20, 30],
194+
[40, 50, 60],
195+
])
196+
); // 0
197+
console.log(countNegativeNum([[-1, 99, 36], false, [18, 33]])); // 1
198+
199+
// Задание 7:
200+
// Напишите функцию для создания нового массива, содержащего только элементы с четными индексами из исходного массива.
201+
202+
function getEvenIndexNewArr(arr) {
203+
if (!Array.isArray(arr)) {
204+
return []; // некорректные входящие данные
205+
}
206+
207+
const evenIndexArr = [];
208+
209+
// for (let i = 0; i < arr.length; i++) {
210+
// if (i % 2 === 0) {
211+
// evenIndexArr.push(arr[i]);
212+
// }
213+
// }
214+
215+
// ?? в завершающем действии отрабатываем +2 и if блок исключается
216+
for (let i = 0; i < arr.length; i += 2) {
217+
evenIndexArr.push(arr[i]);
218+
}
219+
220+
return evenIndexArr;
221+
}
222+
223+
console.log(
224+
getEvenIndexNewArr(['apple', 'banana', 'cherry', 'date', 'elderberry'])
225+
); // [ 'apple', 'cherry', 'elderberry' ]
226+
console.log(
227+
getEvenIndexNewArr(['cat', 'dog', 'fish', 'bird', 'mouse', 'rabbit'])
228+
); // [ 'cat', 'fish', 'mouse' ]
229+
console.log(getEvenIndexNewArr(['milk'])); // [ 'milk' ]
230+
console.log(getEvenIndexNewArr([])); // []
231+
232+
// Задание 8:
233+
// Напишите функцию для генерации таблицы умножения для заданного числа с использованием цикла for.
234+
235+
let number = 5;
236+
237+
function getMultipleTableForNum(number) {
238+
if (!number || typeof number !== 'number') {
239+
return null; // некорректные входящие данные
240+
}
241+
242+
for (let i = 1; i <= 10; i++) {
243+
console.log(`${number} * ${i} = ${number * i}`);
244+
}
245+
}
246+
247+
getMultipleTableForNum(number);
248+
/*
249+
5 * 1 = 5
250+
5 * 2 = 10
251+
5 * 3 = 15
252+
5 * 4 = 20
253+
5 * 5 = 25
254+
5 * 6 = 30
255+
5 * 7 = 35
256+
5 * 8 = 40
257+
5 * 9 = 45
258+
5 * 10 = 50
259+
*/
260+
261+
// Задание 9:
262+
// Напишите функцию для обращения строки (реверса) с использованием цикла for.
263+
264+
let inputString = 'hello world';
265+
let inputString2 = 'JavaScript';
266+
267+
function getReverseStr(str) {
268+
if (!str || typeof str !== 'string') {
269+
return ''; // некорректные входящие данные
270+
}
271+
272+
let reverseStr = '';
273+
274+
for (let i = str.length - 1; i >= 0; i--) {
275+
reverseStr += str[i];
276+
}
277+
278+
return reverseStr;
279+
}
280+
281+
console.log(getReverseStr(inputString)); // "dlrow olleh"
282+
console.log(getReverseStr(inputString2)); // "tpircSavaJ"
283+
284+
// Задание 10:
285+
// Напишите функцию для подсчета количества символов в каждом слове строки с использованием цикла for...in.
286+
287+
function addCharacterCount(str) {
288+
if (!str || typeof str !== 'string') {
289+
return ''; // некорректные входящие данные
290+
}
291+
292+
for (const i in str) {
293+
console.log(`Позиция ${i}: ${str[i]}`);
294+
}
295+
}
296+
297+
addCharacterCount('hello 123');
298+
/*
299+
Позиция 0: h
300+
Позиция 1: e
301+
Позиция 2: l
302+
Позиция 3: l
303+
Позиция 4: o
304+
Позиция 5:
305+
Позиция 6: 1
306+
Позиция 7: 2
307+
Позиция 8: 3
308+
*/
309+
addCharacterCount('abc def');
310+
/*
311+
Позиция 0: a
312+
Позиция 1: b
313+
Позиция 2: c
314+
Позиция 3:
315+
Позиция 4: d
316+
Позиция 5: e
317+
Позиция 6: f
318+
*/

0 commit comments

Comments
 (0)