На самом деле синтаксис очень простой, постараюсь в двух словах объяснить:)
Допустим у нас есть коллекция: var db = new Collection([1, 2, 3, 4, [1, 2, 3]]); Первый способ, обращение по прямой ссылке: // обратимся к первому элементу вложенного массива // функция eq выбирает элемент не по ключу, а по порядку // минус указывает, что отсчёт идёт с конца // знак > указывает родительское отношение db.get('eq(-1) > 0'); Второй способ, итеративный поиск с помощью функции callback: // выберем элементы с чётными индексами db.get(function (el, key, data, i, length, cObj, id) { return i % 2 === 0; }); Третий способ схож со вторым, т.к. здесь тоже итеративный обход, но вместо прямого указания функции, мы пишем её, строчное сокращение: // знак : обозначает, что это идёт строчное сокращение, т.е. в нашем случае оно равносильно return db.get(':i % 2 === 0'); // логично, что мы можем написать и так db.get(':i % 2 === 0 && el !== 2'); // или так, но здесь компилятор уже создаст 2 разных функции // вложенность скобок не ограниченна, можно использовать операторы логики: !, &&, || db.get('(:i % 2 === 0) && (:el !== 2)'); // также фильтр можно заранее сохранить в стеки (как и многое другое) и обращаться по ИД // функцию можно указывать в строчном или в явном виде, функция может содержать другие функции db.pushFilter('odd', ':i % 2 === 0'); // используем фильтр odd и дополнительное условие db.get('odd && (:el !== 2)'); // вызов фильтра в фильтре db.pushFilter('filter2', 'odd && (:i % 2 === 0)'); db.get('filter2'); А последний способ - это указание контекста для фильтра, формула написания такова: контекст + >> + условие. Разумеется - это лишь малая часть возможностей, но сегодня буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока. |
Цитата:
Цитата:
db.pushVariable({ CONST1: 1, CONST2: 2 }); // выбрать все элементы, где значения элементов равны CONST1 db.get(':el === <:CONST1:>'); // или так db.get(':el === this.getVariable("CONST1")'); // или так db.get(function (el) { return el === this.getVariable('CONST1'); }); |
Цитата:
По второму вопросу: кстати нет, и это действительно упущение, спасибо за наводку!:) |
Цитата:
Как часто на диск сбрасывается? |
Цитата:
|
Спасибо за пояснение, теперь стал более понятен синтаксис. Про хранение бд, тоже интересно.
Цитата:
А в остальном, мне понравилось и буду следить за развитием проекта. |
Можно вот ещё покопать https://github.com/sergeyksv/alfred
|
Спасибо за поддержку! В 4-й версии добавлю волшебный метод query, который на вход будет принимать SQL запрос. Интепретатор уже написан, но пока содержит много багов, будут вложенные запросы, переменные, стат функции, триггеры, хранимые процедуры и т.д. За стандарт SQL взял MySQL:)
|
Есть SQLite в браузере
Какое то сравнение с ней можете сделать? Dom storage наcколько я помню ограничена 5 mb а в database storage (SQLite) ограничений не ннашел-реально храню до 100 mb |
Цитата:
Мою же библиотеку можно рассматривать с разных сторон: как мега-интерфейс для различных операций с объектами и массивами, либо абстрактно представить как СУБД. Тип использования, как и структура данных полностью на усмотрения разработчика. Ядро библиотеки не использует специфичных объектов окружения, поэтому без проблем будет работать как в браузере, на сервере или как дополнение к ОСи. Насколько я изучал, то у Indexed DB асинхронный интерфейс вызова и это может быть не удобно в некоторых случаях, а у меня интерфейс полностью синхронный, что упрощает написание кода, НО я специально предусмотрел возможность создания асинхронных надстроек, так что написать расширение не составит труда. ЗЫ: DOM storage можно расширять, а также можно без труда написать любой другой интерфейс для хранения данных. ЗЫЗЫ: почти закончил работу над обзорной статьёй и небольшим обновлением :) |
Часовой пояс GMT +3, время: 07:43. |