/
Программирование
/
Курс JavaScript
/

Агрегация данных (Строки)

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'

Используйте пустую строку как начальное значение.

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются