JavaScript: Агрегация данных (Строки)
Агрегация применяется не только к числам, но и к строкам. Это такие задачи, в которых строка формируется динамически, то есть заранее неизвестно, какого она размера и что будет содержать.
Представьте себе функцию, которая умеет «умножать» строку, то есть она повторяет её указанное количество раз:
repeat('hexlet', 3); // hexlethexlethexletПринцип работы этой функции довольно простой: в цикле происходит «наращивание» строки указанное количество раз:
const repeat = (text, times) => {
// Нейтральный элемент для строк – пустая строка
let result = '';
let i = 1;
while (i <= times) {
// Каждый раз добавляем строку к результату
result = `${result}${text}`;
i = i + 1;
}
return result;
};Распишем выполнение этого кода по шагам:
// Для вызова repeat('hexlet', 3);
let result = '';
result = `${result}hexlet`; // hexlet
result = `${result}hexlet`; // hexlethexlet
result = `${result}hexlet`; // hexlethexlethexletНаглядно процесс наращивания строки выглядит так:
repeat('hexlet', 3):
i=1: result = '' + 'hexlet' = 'hexlet'
i=2: result = 'hexlet' + 'hexlet' = 'hexlethexlet'
i=3: result = 'hexlethexlet' + 'hexlet' = 'hexlethexlethexlet'
└── результатНейтральный элемент
Чтобы наращивание работало, нужно стартовое значение. Для строк таким значением является пустая строка ''.
Она называется нейтральным элементом, потому что при конкатенации ничего не меняет:
console.log('' + 'abc'); // => abc
console.log('abc' + ''); // => abcПоэтому именно пустая строка всегда используется как начальное значение при агрегации строк.
Задание
Реализуйте функцию sanitizePhoneNumber(), которая принимает номер телефона из формы и возвращает строку без пробелов, скобок и дефисов.
Пользователи вводят номера по-разному, но перед сохранением их приводят к единому виду. Пройдите исходную строку посимвольно и соберите новый номер только из полезных символов.
sanitizePhoneNumber('+7 (999) 123-45-67'); // => '+79991234567'
sanitizePhoneNumber('8 800 555 35 35'); // => '88005553535'
sanitizePhoneNumber('(123) 456-7890'); // => '1234567890'Используйте пустую строку как начальное значение.
Полезное
JavaScript: Агрегация данных (Строки)
Агрегация применяется не только к числам, но и к строкам. Это такие задачи, в которых строка формируется динамически, то есть заранее неизвестно, какого она размера и что будет содержать.
Представьте себе функцию, которая умеет «умножать» строку, то есть она повторяет её указанное количество раз:
repeat('hexlet', 3); // hexlethexlethexletПринцип работы этой функции довольно простой: в цикле происходит «наращивание» строки указанное количество раз:
const repeat = (text, times) => {
// Нейтральный элемент для строк – пустая строка
let result = '';
let i = 1;
while (i <= times) {
// Каждый раз добавляем строку к результату
result = `${result}${text}`;
i = i + 1;
}
return result;
};Распишем выполнение этого кода по шагам:
// Для вызова repeat('hexlet', 3);
let result = '';
result = `${result}hexlet`; // hexlet
result = `${result}hexlet`; // hexlethexlet
result = `${result}hexlet`; // hexlethexlethexletНаглядно процесс наращивания строки выглядит так:
repeat('hexlet', 3):
i=1: result = '' + 'hexlet' = 'hexlet'
i=2: result = 'hexlet' + 'hexlet' = 'hexlethexlet'
i=3: result = 'hexlethexlet' + 'hexlet' = 'hexlethexlethexlet'
└── результатНейтральный элемент
Чтобы наращивание работало, нужно стартовое значение. Для строк таким значением является пустая строка ''.
Она называется нейтральным элементом, потому что при конкатенации ничего не меняет:
console.log('' + 'abc'); // => abc
console.log('abc' + ''); // => abcПоэтому именно пустая строка всегда используется как начальное значение при агрегации строк.
Задание
Реализуйте функцию sanitizePhoneNumber(), которая принимает номер телефона из формы и возвращает строку без пробелов, скобок и дефисов.
Пользователи вводят номера по-разному, но перед сохранением их приводят к единому виду. Пройдите исходную строку посимвольно и соберите новый номер только из полезных символов.
sanitizePhoneNumber('+7 (999) 123-45-67'); // => '+79991234567'
sanitizePhoneNumber('8 800 555 35 35'); // => '88005553535'
sanitizePhoneNumber('(123) 456-7890'); // => '1234567890'Используйте пустую строку как начальное значение.
Полезное
Ваше упражнение проверяется по этим тестам
import { expect, test } from 'vitest';
import f from './index.js';
test('aggregation strings', () => {
expect(f('+7 (999) 123-45-67')).toBe('+79991234567');
expect(f('8 800 555 35 35')).toBe('88005553535');
expect(f('(123) 456-7890')).toBe('1234567890');
});Решение учителя откроется через:
20:00
