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
