# Фишки

# Избавление от повторяющихся элементов в массиве

Здесь используется:

  1. Link; Метод spread (TODO)
  2. Link; Встроенный объект Set (TODO)
// Вариант 1
let arr = [1, 2, 3, 4, 1, 2, 3, 1, 2, 1];
arr = [...new Set(arr)];

// Вариант 2
let arr = [1, 2, 3, 4, 1, 2, 3, 1, 2, 1];
arr = Array.from(new Set(arr));

// Выведет [ 1, 2, 3, 4 ]

# Нахождение количества цифр в числе за О(1)

Здесь используется:

  1. Link; Встроенный объект Math (TODO)

# Пояснение:

Этот код использует функции из стандартного объекта Math, чтобы определить количество цифр в числе number.

  • Math.log10(number): Эта функция возвращает десятичный логарифм числа number. Например, если number равно 100, то Math.log10(100) будет равно 2, так как 10 в степени 2 равно 100.

  • Math.round(Math.log10(number) + 1): Здесь мы берем десятичный логарифм числа number, увеличиваем его на 1 (чтобы учесть саму цифру в числе), и округляем результат до ближайшего целого числа с помощью Math.round(). Это дает нам количество цифр в числе number.

let number = 192837465;
let NumberOfDigits = Math.round(Math.log10(number) + 1);

// Выведет 9

# Подсчет вхождения каждого элемента в строке

Здесь используется:

  1. Link; Метод spread (TODO)
  2. Link; Метод reduce (TODO)

# Пояснение:

Этот код использует метод массивов reduce() для анализа строки str и подсчета частоты встречаемости каждого символа в этой строке.

  • [...str]: Это преобразует строку str в массив, разбивая ее на отдельные символы. Например, если str равно "hello", то [...str] будет равно ["h", "e", "l", "l", "o"].

  • .reduce((result, symbol) => ((result[symbol] = (result[symbol] || 0) + 1), result), {}): Этот метод reduce() проходит по каждому элементу массива (в данном случае, по каждому символу строки).

Функция обратного вызова, переданная в reduce(), выполняется для каждого элемента массива. В данном случае, она выполняется для каждого символа строки.

  • result[symbol] = (result[symbol] || 0) + 1: Здесь проверяется, есть ли уже запись для текущего символа symbol в объекте result. Если она уже существует, увеличивается значение счетчика для этого символа на 1. Если она не существует (т.е. result[symbol] равен undefined), тогда значение счетчика устанавливается в 1.

В итоге, в объекте result будут содержаться частоты встречаемости каждого символа в строке.

const str = "abcd\nabc\nad\na";

let NumberOfSymbols = [...str].reduce(
  (result, symbol) => ((result[symbol] = (result[symbol] || 0) + 1), result),
  {}
);

// Выведет { a: 4, b: 2, c: 2, d: 2, '\n': 3 }