Работа с массивами

Bliss.js предоставляет мощные и удобные методы для работы с массивами, которые позволяют выполнять операции фильтрации, трансформации, поиска и манипуляции элементами без необходимости использования громоздких циклов и стандартных функций JavaScript. Основной подход Bliss.js ориентирован на цепочки методов и функциональный стиль программирования, что повышает читаемость и компактность кода.


Создание массивов

Bliss.js позволяет создавать массивы через обычные литералы JavaScript или использовать встроенные методы библиотеки для динамического формирования коллекций:

let arr = bliss.array([1, 2, 3, 4, 5]);

let dynamicArr = bliss.range(1, 10); // массив от 1 до 10

Метод bliss.range(start, end, step) автоматически генерирует последовательности чисел с заданным шагом. Это удобно для инициализации больших наборов данных без ручного перечисления элементов.


Основные методы фильтрации и поиска

Bliss.js расширяет стандартные методы массивов функциональными аналогами с улучшенной цепочкой вызовов:

  • filter – фильтрация по условию
  • find – поиск первого элемента, удовлетворяющего условию
  • includes – проверка наличия элемента
  • some / every – проверка условий для элементов массива

Пример использования:

let numbers = bliss.array([10, 15, 20, 25, 30]);

let evenNumbers = numbers.filter(n => n % 2 === 0);
let firstOver20 = numbers.find(n => n > 20);
let hasFifteen = numbers.includes(15);
let allAboveZero = numbers.every(n => n > 0);

Особенность Bliss.js в том, что методы возвращают объект массива Bliss, что позволяет выстраивать цепочки операций без дополнительных промежуточных переменных:

let processed = bliss.array([1, 2, 3, 4, 5])
    .filter(n => n % 2 === 1)
    .map(n => n * 10)
    .value(); // [10, 30, 50]

Метод .value() преобразует объект Bliss обратно в обычный массив JavaScript.


Трансформация массивов

Bliss.js поддерживает ряд методов для преобразования данных:

  • map – применение функции к каждому элементу
  • reduce – аккумуляция значений
  • flat / flatten – “выравнивание” вложенных массивов
  • sort / sortBy – сортировка элементов

Пример применения:

let items = bliss.array([
    {name: "Apple", price: 50},
    {name: "Banana", price: 30},
    {name: "Cherry", price: 20}
]);

let names = items.map(item => item.name).value(); // ["Apple", "Banana", "Cherry"]

let totalPrice = items.reduce((sum, item) => sum + item.price, 0); // 100

let sortedByPrice = items.sortBy("price").value();

Метод sortBy особенно удобен для работы с массивами объектов, позволяя сортировать по ключу без необходимости писать сложные функции сравнения.


Работа с вложенными массивами

Bliss.js упрощает обработку вложенных структур благодаря методам flatMap и pluck:

let data = bliss.array([
    {id: 1, tags: ["a", "b"]},
    {id: 2, tags: ["b", "c"]}
]);

let allTags = data.flatMap(item => item.tags).value(); // ["a", "b", "b", "c"]

let uniqueTags = bliss.array(allTags).uniq().value(); // ["a", "b", "c"]

Метод uniq() удаляет дубликаты и поддерживает удобное цепочное использование с другими функциями библиотеки.


Манипуляции с элементами массива

Bliss.js предоставляет методы для добавления, удаления и замены элементов без использования стандартных циклов:

  • push / unshift – добавление элементов в конец или начало
  • pop / shift – удаление элементов
  • insertAt / removeAt – вставка или удаление по индексу
  • updateAt – изменение элемента по позиции

Примеры:

let arr = bliss.array([1, 2, 3]);

arr.push(4).unshift(0); // [0, 1, 2, 3, 4]
arr.removeAt(2);        // [0, 1, 3, 4]
arr.updateAt(1, 10);    // [0, 10, 3, 4]

Методы возвращают объект Bliss, что позволяет сразу выполнять следующие операции без промежуточного присваивания.


Группировка и объединение данных

Bliss.js имеет встроенные методы для работы с коллекциями:

  • groupBy – группировка элементов по значению ключа или функции
  • chunk – разбиение массива на блоки фиксированной длины
  • concat – объединение массивов

Пример:

let people = bliss.array([
    {name: "Alice", role: "admin"},
    {name: "Bob", role: "user"},
    {name: "Charlie", role: "admin"}
]);

let grouped = people.groupBy("role").value();
/* 
{
  admin: [{name: "Alice", ...}, {name: "Charlie", ...}],
  user: [{name: "Bob", ...}]
}
*/

let numbers = bliss.range(1, 10);
let chunks = numbers.chunk(3).value(); // [[1,2,3],[4,5,6],[7,8,9],[10]]

Метод groupBy позволяет легко агрегировать данные для отчетов и аналитики, а chunk — для организации данных в порционные блоки.


Дополнительные полезные методы

  • reverse – обратный порядок элементов
  • shuffle – случайная перестановка элементов
  • clone – глубокое копирование массива
  • tap – выполнение побочных действий без разрыва цепочки

Пример использования tap:

bliss.array([1,2,3])
    .tap(arr => console.log("Before map:", arr))
    .map(n => n * 2)
    .tap(arr => console.log("After map:", arr))
    .value();

Метод tap полезен для отладки и промежуточных проверок, не нарушая цепочку вызовов.


Bliss.js значительно упрощает работу с массивами, объединяя функциональные возможности стандартного JavaScript с удобными цепочками вызовов и методами для сложной обработки данных. Использование этой библиотеки делает код читаемым, компактным и легко расширяемым, особенно при работе с коллекциями объектов и многомерными массивами.