Список Javascript библиотек для рисования графиков и диаграмм 2 / Хабр
Продолжаем тему визуализации данных в интернете.
Предыдущие топики:
- Изумительные диаграммы с новым Chart контролом
- Визуализация направленных графов в вебе
- Список Javascript библиотек для рисования графиков и диаграмм — habrahabr.ru/blogs/javascript/79960 (публикация в блоге — msug.vn.ua/blogs/akrakovetsky/archive/2010/01/04/javascript-charting-libraries.aspx)
flot
flot — Javascript библиотека для jQuery, позволяет строить графики.
Лицензия: MIT
Сайт: code.google.com/p/flot
Браузеры: Internet Explorer 6/7/8, Firefox 2.x+, Safari 3.0+, Opera 9.5+ и Konqueror 4.x+ с canvas
API Google Chart
API Google Chart позволяет динамически создавать диаграммы. Поддерживает line, bar, pie и radar charts, а также venn diagrams, scatter plots, sparklines, maps, google-o-meters и QR коды.
Чтобы ознакомиться с API Chart в действии, откройте окно браузера и скопируйте в строку адреса следующий URL:
habrastorage.org/getpro/habr/post_images/d2b/c94/dfa/d2bc94dfab98371241fcbf005d576fd1.png
Результат:
Сайт: code.google.com/intl/ru/apis/chart
Для PHP программистов: luddep.se/notebook/2008/04/13/charts-php-and-google-charts-api
ChartMaker — open source библиотека, построена на Javascript библиотеке Ext JS и является оберткой для Google Chart API.
Сайт: almaer.com/chartmaker
Processing.js
Processing.js is — открытый язык программирования для тех, кто хочет программировать изображения и анимации без использования flash или java апплетов. Processing.js использует Javascript для рисования, а также canvas.
Сайт: processingjs.org
Браузеры: FireFox, Safari, Opera и Chrome
Лицензия: свободное использование
moowheel
moowheel используется для визуализации связей между объектами с помощью Javascript и canvas элемента. Требует Mootools 1.2.Демо: www.unwieldy.net/projects/moowheel/demo/large.html
Сайт: www.unwieldy.net/projects/moowheel
Google Code: code.google.com/p/moowheel
Лицензия: MIT
JSXGraph
JSXGraph позволяет рисовать геометрические объекты, графики и диаграммы.
Возможности:
* геометрия Эвклида: точки, линии, круги, пересечения, перпендикулярные линии, углы
* графики: Graphs, parametric curves, polar curves, data plots, Bezier curves
* дифференциальные уравнения
* Lindenmayer systems
* слайдеры
* анимация
* полиномиальная интерполяция, сплайны
* нормали
* векторы
Сайт: jsxgraph.uni-bayreuth.de/wp
Лицензия: LGPL – Lesser GNU General Public License
Браузеры: Mozilla Firefox 2.0+, Opera, Safari 3+, Google Chrome, Microsoft Internet Explorer 6+
Prototype + Canvas = ProtoChart
ProtoChart — open source библиотека, которая использует canvas и Prototype.
Сайт: www.deensoft.com/lab/protochart
Возможности:
* Line, bar, pie, curve, mix и area charts
* поддержка нескольких серий данных
* настраиваемые гриды, границы, фон
* настраиваемые оси
* поддерживает IE6/7, FF2/3 and Safari
* работает на iPhone
jQuery Sparklines
jQuery Sparklines — плагин для построения на лету sparklines.
Сайт: www.omnipotent.net/jquery.sparkline
Браузеры: Firefox 2+, Safari 3+, Opera 9, Google Chrome и Internet Explorer 6, 7 & 8.
Лицензия: BSD
fgCharting
fgCharting — jQuery плагин, использует canvas для построения грациков из таблиц.Сайт: www.filamentgroup.com/lab/creating_accessible_charts_using_canvas_and_jquery
Лицензия: MIT
Браузеры: IE6, IE7, IE8, Firefox 2, Firefox 3.5, Safari 3 и 4, Opera 9.
Пока все. Дальше будут Flash / Sliverlight библиотеки, если вопрос актуальный, конечно 🙂
Спасибо за внимание!
Детальный список инструментов для JavaScript
В программной экосистеме JavaScript существует множество инструментов. В этой статье вам будут представлены наиболее удобные с точки зрения автора инструменты работы с JavaScript.
Содержание статьи:
- Инструменты сборки и автоматизации;
- IDE и редакторы кода;
- Инструменты документирования кода;
- Инструменты тестирования;
- Инструменты отладки;
- Инструменты безопасности;
- Инструменты аналитики и оптимизации кода;
- Инструменты управления версиями;
- Инструменты управления пакетами и зависимостями.
Инструменты сборки и автоматизации
- Webpack — представляет собой модульный упаковщик, который создаёт граф зависимостей со всеми модулями для приложения на JavaScript. Webpack упаковывает модули в один или несколько маленьких пакетов для загрузки браузером. Кроме того, Webpack может использоваться в качестве средства запуска задач, так как он анализирует зависимости между модулями и образовывает ресурсы (ассеты). Подробнее с использованием Webpack в своих проектах вы можете ознакомиться в нашей статье.
- Grunt — таск раннер, предназначенный для автоматизации повторяющихся и трудоёмких задач, которые отнимают много времени. В его программной экосистеме существует огромное количество плагинов (более 6000).
- Gulp — не очередной диспетчер запуска задач, а инструмент с интересным подходом: он определяет задачи в JavaScript как функции, также GUl автоматизирует «болезненные» задачи, предлагая обширную программную экосистему (более 2700 плагинов), также он обеспечивает лучшую прозрачность и контроль над процессом.
- Browserify позволяет разработчикам программного обеспечения использовать модули стиля NodeJS в браузерах. Вы определяете зависимости, а Broweserify упаковывает всё это в аккуратный JS-файл.
- Brunch.io — инструмент, основными идеями которого являются скорость и простота. Он поставляется с простой конфигурацией и подробной документацией для быстрого запуска. Brunch автоматически создаёт карту JS-файлов вместе с таблицами стилей CSS, что упрощает процесс отладки на стороне клиента.
- Yeoman — универсальный инструмент, который может использоваться с почти любым языком программирования (JavaScript, Python, C#, Java и прочие). Эта базовая система кодогенерации с богатой программной экосистемой (более 6200 плагинов) служит для разработки веб-приложений. Благодаря Yeoman вы можете быстро создавать новые проекты, не забывая об обслуживании и улучшении уже существующих.
IDE и редакторы кода
- WebStorm — мощная IDE для продвинутой разработки веб-приложений на JavaScript. Она предлагает поддержку различных фреймворков и языков разметки. WebStorm может быть легко интегрирован с дополнительными инструментами вроде тестеров, средств контроля качества кода, сборщиков и т. д. В IDE также встроены такие функции, как автоматическое завершение кода, немедленное обнаружение ошибок, навигация, встроенный терминал, богатый набор плагинов и многое другое.
- Atom — бесплатный продукт от GitHub и выбор №1 для многих разработчиков. Он представляет собой легко настраиваемый редактор кода, который поставляется с некоторыми интересными функциями «прямо из коробки». В Atom имеется встроенный менеджер пакетов, интеллектуальное автоматическое завершение кода и прочие полезные функции. Также Atom является кроссплатформенным редактором кода.
- Visual Studio Code — поддерживается компанией Microsoft и полностью поддерживает TypeScript «прямо из коробки». В Visual Studio Code есть интеллектуальное завершение кода и подсветка синтаксиса с помощью технологии автодополнения IntelliSense, также есть встроенный инструмент отладки, встроенная поддержка команд Git, контроль версий и многое другое. Более того, вы можете расширить функциональность редактора путём подключения широкого спектра расширений.
- Brackets — это лёгкий редактор кода с открытым исходным кодом. В основном он ориентирован на визуальные инструменты и поддержку процессора для упрощения работы в браузере. Brackets поставляется с удобной функцией предварительного просмотра в реальном времени.
Инструменты документирования кода
Документирование кода превращает ваше приложение в «стеклянную коробку», показывая, как работает тот или иной фрагмент кода. Инструменты автоматического документирования кода описывают функции и их назначения, что позволяет экономить время на анализе и понимании кода в будущем.
- Swagger — это набор правил и инструментов для описания API. Инструмент представляет собой языконезависимую утилиту. Это значит, что Swagger создаёт чёткую документацию, которая читается одинаково хорошо как человеком, так и машиной, позволяя автоматизировать процессы зависящие от API.
- JSDoc — набор инструментов, автоматически создающий многостраничную текстовую документацию (HTML, JSON, XML и т. д.) из комментариев из исходного кода на JavaScript. Это приложение может пригодиться для управления крупномасштабными проектами.
- jGrouseDoc (jGD) — это гибкий инструмент с открытым исходным кодом, который позволяет разработчикам генерировать API из комментариев из исходного кода на JavaScript. jGD документирует не только переменные и функции, но и пространства имён, интерфейсы, пакеты и некоторые другие элементы.
- YUIDoc — приложение, написанное на NodeJS. Оно использует синтаксис, подобный тому, который применяется в Javadoc и Doxygen. Также инструмент может похвастаться поддержкой предварительного просмотра в реальном времени, расширенной поддержкой языка и продвинутой разметку.
- Docco — бесплатный инструмент для документации, написанный на «литературном» CoffeeScript. Он создаёт HTML-документ для отображения ваших комментариев, чередующихся с кодом. Следует отметить, что инструмент поддерживает не только JavaScript, но и другие языки. Например, Python, Ruby, Clojure и прочие.
Инструменты тестирования
Инструменты тестирования для JavaScript созданы для обнаружения ошибок на этапе разработки, чтобы избежать в будущем ошибок у пользователей. С ростом сложности пользовательских приложений автоматические тесты не только повышают производительность приложения, но и помогают компаниям сохранить бюджет.
- Jasmine — BDD-фреймворк (Behavior-driven Development — разработка на основе поведений) служит для тестирования JS-кода. У него нет внешних зависимостей, и он не требует запуска DOM. Jasmine имеет чистый и понятный синтаксис, что позволяет ускорять и упрощать тестирование. Также фреймворк может использоваться для тестирования кода Python и Ruby.
- Mocha — это функциональная тестовая среда, работающая на Node.js в браузере. Она проводит тесты последовательно для обеспечения гибкой и точной отчётности, делая асинхронные тесты весёлыми и лёгкими. Mocha часто используется вместе с Chai для проверки результатов теста.
- PhantomJS часто используется для интерфейсных тестов и юнит-тестов. Учитывая то, что это что-то вроде «безголового» WebKit, скрипты выполняются намного быстрее. Также он включает в себя встроенную поддержку различных веб-стандартов. Например, JSON, Canvas, обработку DOM, SVG и селекторы CSS.
- Protractor — это сквозной тестовый фреймворк, написанный на Node.js для тестирования приложений на AngularJS и Angular. Он был создан на основе WebDriverJS и проверяет приложения подобно конечному пользователю, используя специальные драйвера и встроенные события.
Инструменты отладки
Отладка кода — довольно трудоёмкий и поглощающий время процесс для JavaScript-разработчиков. Инструменты для отладки кода будут особенно полезны при работе с тысячами строк кода. Многие из инструментов отладки обеспечивают довольно точные результаты.
- JavaScript Debugger — инструмент от сообщества разработчиков Mozilla (MDN), который может быть использован как автономное веб-приложение для отладки кода в разных браузерах. Firefox предлагает локальные и удалённые функциональные возможности, а также возможность отладки кода на Android-устройстве с помощью Firefox для Android.
- Chrome Dev Tools — набор инструментов, включающий в себя несколько утилит для отладки кода JavaScript, редактирования CSS и тестирования производительности приложений.
- ng-inspector — кроссбраузерное расширение, которое призвано помочь разработчикам с написанием, пониманием и отладкой приложений на AngularJS. Утилита поставляется с обновлениями в реальном времени, подсветкой DOM, прямым доступом к областям, моделям и прочим элементам приложения.
- Augury — расширение для браузера Google Chrome и отладки приложений на Angular 2. Оно позволяет разработчикам приложений на Angular 2 напрямую анализировать структуру приложения и рабочие характеристики, а также позволяет обнаружить изменения.
Инструменты безопасности
- Snyk — коммерческий инструмент для обнаружения, исправления и предотвращения известных уязвимостей в приложениях на JavaScript, Java и Ruby. Служба имеет собственную базу данных уязвимостей и берёт данные из NSP и NIST NVD. Патчи и обновления, которые предлагает компания, позволяют разработчикам предупредить риски, связанные с безопасностью.
- Node Security Project предлагает полезные инструменты для сканирования зависимостей и обнаружения уязвимостей. NSP использует свою собственную базу данных, построенную на сканировании модулей npm, а также данные из общих баз данных, таких как NIST NVD (National Vulnerability Database). Кроме того, NSP обеспечивает интеграцию с программным обеспечением GitHub Pull Request и CI. Также имеется проверка в реальном времени, предупреждения и рекомендации по устранению уязвимостей в приложениях на Node.js.
- RetireJS — это средство проверки зависимостей с открытым исходным кодом. Включает в себя различные компоненты, такие как сканер командной строки, плагин Grunt, расширения Firefox и Chrome, плагины Burp и OWASP ZAP. Retirejs собирает информацию об уязвимостях из NIST NVD и других источников, таких как системы отслеживания ошибок, блоги и списки рассылки.
- Gemnasium — это коммерческий инструмент с бесплатной пробной версией. Он поддерживает различные технологии и пакеты, включая Ruby, PHP, Bower (JavaScript), Python и npm (JavaScript). Инструмент безопасности Gemnasium поставляется с полезными функциями, такими как автоматическое обновление, оповещения в реальном времени, уведомления о безопасности и интеграция с сервисом Slack.
- OSSIndex поддерживает различные экосистемы (Java, JavaScript и .NET / C #) и множество платформ, таких как NuGet, npm, Bower, Chocolatey, Maven, Composer, Drupal и MSI. Он собирает информацию об уязвимостях из Национальной базы данных уязвимостей (NVD) и отзывов. Также он обрабатывает информацию от членов сообщества.
Инструменты аналитики и оптимизации кода
Для проверки качества кода обычно обращаются к функциональному тестированию и юнит-тестированию. Однако существует еще один подход, который позволяет разработчикам проверять качество кода и его соответствие стандартам кодирования, а именно статический анализ кода.
В настоящее время в современном программном обеспечении объединяются инструменты анализа статического кода во время разработки, чтобы исключить попадание некачественного кода в продакшен.
- JSLint — это аналитический веб-инструмент для проверки качества кода JavaScript. Как только он обнаруживает проблему в источнике, он возвращает сообщение с описанием проблемы и приблизительным местоположением в коде. JSLint способен анализировать некоторые нормы стиля и раскрывать синтаксические ошибки и структурные проблемы.
- JSHint — гибкий инструмент, развивающийся сообществом, для обнаружения ошибок и потенциальных проблем в вашем JS-коде, кроме того, JSHint — форк от JSLint. Основная цель этого инструмента статического анализа кода — помощь разработчикам JavaScript, работающим над сложными программами. Он способен обнаруживать ошибки синтаксиса, неявное преобразование типов данных или отсутствие переменной. Однако он не может определить скорость и правильность работы вашего приложения, как и не сможет определить проблемы с памятью в вашем приложении. JSHint — форк от JSLint.
- ESLint — это линтер с открытым исходным кодом для веб-приложений JSX и JavaScript. Он помогает обнаруживать сомнительные шаблоны или находить код, который не соответствует конкретным стилям. Это позволяет разработчикам обнаруживать ошибки в JS-коде без его выполнения, тем самым экономя время. Будучи написанным на Node.js, инструмент предлагает оперативную среду выполнения и плавную установку через npm.
- Flow — статический контролёр кода для JavaScript, разработанный компанией Facebook. Он использует аннотации статического типа для проверки кода на предмет ошибок. Типы — параметры, установленные разработчиками, а Flow проверяет ваше программное обеспечение на соответствие требованиям.
Инструменты управления версиями
- В последние годы Git стала широко используемой системой контроля версий как для небольших, так и для крупных проектов. Эта бесплатная утилита обеспечивает отличную скорость работы и эффективность. Её популярность объясняется распределённой системой и различными типами элементов управления, а также промежуточной областью, где версии могут быть просмотрены и отформатированы непосредственно перед завершением фиксации.
- Инструмент Subversion или SVN приобрёл огромную популярность, и он по-прежнему широко используется в проектах с открытым исходным кодом и такими платформами, как Python Apache или Ruby. Этот CVS поставляется со множеством функций, позволяющих управлять различными операциями (переименование, копирование, удаление и т. д.), слияниями, блокировкой файлов и многим другим.
Инструменты управления пакетами и зависимостями
- Bower — разработка Twitter, которая помогает управлять ресурсами, фреймворками, библиотеками и другими утилитами. Она предлагает доступ к большому количеству пакетов, помогая разработчикам JavaScript оптимизировать процесс разработки и улучшить результаты.
- Npm — диспетчер пакетов Node.js. Пакеты могут использоваться как для фронтенда, так и для бэкенда. Npm является системой управления пакетами для JavaScript и самым большим реестром программного обеспечения в мире.
- Yarn — инструмент, который приобрёл популярность благодаря Google, Facebook, Tilde и Exponent. Основное внимание в нём уделено безопасности, скорости и быстродействию. Инструмент позволяет совместно использовать код через пакеты и модули вместе с файлом, описывающим пакет.
- Duo вобрал в себя лучшее из Browserify, Component и Go, превратив разработку фронтенда в быстрый и простой процесс. Основная идея Duo заключается в упрощении написания модульных компонентов и создания масштабных веб-приложений быстро и безболезненно.
Список лучших инструментов для разработки на JavaScript может продолжаться до бесконечности. В этой статье вы увидели лишь популярные и надёжные инструменты, которые служат основой для качественных продуктов.
Перевод статьи «The ultimate list of JavaScript tools»
Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.
Подробнее
Реклама на tproger.ru
Загрузка
2 способа объединить массивы в JavaScript
Вот 2 способа объединить ваши массивы и вернуть НОВЫЙ массив. Мне нравится использовать оператор Spread. Но если вам нужна поддержка старых браузеров, вам следует использовать Concat.
- Альтернативный синтаксис concat
- Разница между спредом против CONCAT
- Пример: Расбор с произвольным аргументом
- Merge Array с Push 🤔
- Поддержка браузера
Alternative Concat Syntax
В качестве альтернативы вы также можете написать метод concat
, в этом отношении:
Как видите, такой способ написания не манипулирует и не изменяет существующий массив.
Какой выбрать?
Давайте перечислим обе версии, чтобы вы могли увидеть их в сравнении.
Итак, теперь вопрос, какой выбрать 🤔. Я предпочитаю версии A , потому что я думаю, что намерение намного яснее. Просто взглянув на него, я знаю, что создаю новый массив, а не манипулирую существующим массивом. А если я смотрю на Version B , кажется, что я добавляю массив грузовиков
к массиву автомобилей
, и мне не кажется очевидным, что массив автомобилей
не изменяется. Но, возможно, это только я. Мне было бы любопытно узнать, что вы думаете?
Поскольку на самом деле у меня нет существенной причины, кроме эстетической, я думаю, что вы и ваша команда должны придерживаться того, что выберете 👍
Разница между Spread и Concat
Я предпочитаю использовать распространение
, потому что я нахожу его более кратким и легким для написания. НО, есть еще преимущества использования concat
.
Распространение — это фантастика, когда вы заранее знаете, что имеете дело с массивами. Но что происходит, когда источником является что-то другое, например строка. И вы хотите добавить эту строку в массив. Давайте рассмотрим пример.
Пример: Работа с произвольным аргументом
Предположим, что это желаемый результат:
A. Использование Spread
И если мы будем следовать шаблону, мы использовали и использовали оператор спреда. Вот что получается:
☝️ Если мы растянем нашу строку, она разобьёт слово на отдельные буквы. Таким образом, это не приводит к желаемому результату.
B. Использование Concat
НО, если мы будем следовать шаблону concat, который мы делали. Вот что получается:
☝️ Отлично! Мы получаем желаемый результат.
Я знаю, что некоторые из вас такие, ага! Я просто напишу несколько условий, чтобы убедиться, что то, что я передаю, является массивом, и выполню его соответствующим образом. Конечно, это тоже сработает. Или просто пишите меньше кода и используйте concat
и покончим с 😂
Вердикт
Итак, вот быстрое правило. Если вы знаете, что имеете дело с массивами, используйте spread
. Но если вы можете иметь дело с возможностью не-массива, используйте concat
для объединения массива 👍
В любом случае, я просто хочу указать на это, чтобы вы могли использовать наиболее подходящий метод в зависимости от проблемы, с которой вы столкнулись. Я пытаюсь решить 👍
Объединить массив с помощью Push 🤔
Некоторые из вас спрашивают, а нельзя ли мне также использовать нажмите
, чтобы объединить массив. И да, вы точно можете! Но когда вы используете push
, он манипулирует существующим массивом или изменяет его. Он НЕ создает новый массив. Итак, в зависимости от того, что вы пытаетесь сделать. Убедитесь, что вы помните об этом.
Также, когда вы пытаетесь поместить массив в другой массив. Вам нужно будет распространить его, иначе вы получите вложенный массив. Конечно, если вы этого не хотели 😜
Поддержка браузера
Распространение было введено в ES6, поэтому его поддерживают все современные браузеры. Кроме «я слишком крут» Internet Explorer — никакой поддержки там нет 😕. Поэтому, если вам нужна поддержка IE, вы хотите использовать вместо concat
или используйте компилятор, например Babel.
- Поддержка браузера: Распространение
- Поддержка браузера: Concat
Ресурсы
- MDN Веб -документы — Concat
- MDN Веб -документы — Распространение
- Stack Overflow: From vs Array.concat
Работайте с несколькими. списки в JavaScript
Если вам когда-либо приходилось перебирать несколько списков одновременно или отображать отфильтрованную карту карты, вы поймете, что с вложением всех этих блоков и обратных вызовов не очень легко работать или Понимаю.
К счастью, есть несколько крутых приемов, которые превращают несколько массивов (или, например, бесконечные последовательности, созданные генераторами) в один массив с кратким и мощным синтаксисом. Я возьму этот довольно большой список своих общедоступных списков и превращу его в список всех имен файлов с типом, установленным на «JavaScript». Я использую lodash для удобства.
_.map(_.filter(_.flatMap(суть, (суть) => { вернуть _.values(gist.files) }), (файл) => { вернуть file.language === 'JavaScript' }), (файл) => { вернуть файл.имя_файла })
Что дает следующий массив.
['lazyArray.js', 'кнопка.js', 'formatNumberWithCommas.js', 'x-пример.js', 'что мы делаем.js', 'скомпилировать.js', 'скомпилировать.spec.js', 'фабрика.js', 'урожай.js', 'main.js', 'e.js', 'пример.js', 'EventEmitter.js', 'api.js', 'пример.js', 'графики.js', 'colors.js' ]
Вы можете извлечь части этого в именованные переменные или переместить в другие функции, но я хочу сказать, что что-то довольно простое требует большого жонглирования. Если вы хотите добавить еще карты или фильтры посередине, вам придется постоянно перемещать аргументы. Нелегко меняться и адаптироваться.
Однако мы можем полностью исключить необходимость вложенности, используя то, что называется пониманием списка.
Понимание списков
Моя любимая реализация понимания списков может быть найдена на моем любимом языке Clojure for. Вы также можете найти их во многих других языках, таких как Python и Scala, я просто в восторге от всех этих скобок.
В JavaScript даже был запланирован для ES6, хотя он был вытащен из спецификации, не знаю почему. В Firefox какое-то время было реализовано что-то вроде ES6, но в то время это было нестандартно. Если вас это утешит, мне все равно не понравился синтаксис.
Они позволяют создавать единый список из одного оператора или вызова, который принимает несколько списков вместе с некоторыми параметрами. Теоретически вы должны иметь возможность ссылаться на эти списки и определять промежуточные значения из этих списков по мере их повторения. Затем у вас есть функция, которая вызывается с единственными значениями из этих списков, и то, что она возвращает, становится вашим окончательным списком.
Я создал один для JavaScript, который является портом реализации Clojure, я пытался сохранить его как можно ближе к оригиналу. Включая API на основе кода как данных и лень на всем пути. Вы можете использовать простые старые массивы или бесконечные генераторы, он примет любой повторяемый.
Представляем forc
Название происходит от «для понимания» или, может быть, даже «для Clojure», но в основном потому, что я, очевидно, не могу использовать просто «для» в качестве имени. Он позволяет делать все то же, что и Clojure for, но с помощью JavaScript и любых итераций. Он написан со всеми вещами ES6y, и я бы рекомендовал использовать его с Babel, но он будет работать и без них (я компилирую его во время публикации). До ES6 у вас не было возможности легко итерировать итерации, которые он генерирует, поэтому я бы не рекомендовал этого делать.
Вот пример бесконечных последовательностей из README.
// Бесконечный генератор всех натуральных чисел функция * числа () { пусть п = 0 пока (правда) { выход п++ } } форс([ 'n', числа(), ':let', ['квадрат', ({n}) => n * n], ': while', ({квадрат}) => квадрат < 100 ], ({квадрат}) => квадрат) // Результаты только для тех, чей квадрат < 100 // [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
API покажется странным любому, кто не использовал версию Clojure, но он чрезвычайно мощный. Подход, основанный на декларативном массиве, позволил мне сделать классную пересвязку значений по мере выполнения инструкций. Я видел, как другие делали это с помощью длинных цепочек вызовов методов или вычислений, которые, на мой взгляд, и близко не приближаются к элегантности Clojure. Эта библиотека снова случайно добавляет немного шепелявости в JavaScript. Я не могу помочь.
Теперь давайте решим начальную задачу с силой.
форс([ 'суть', суть, 'файл', ({gist}) => _.values(gist.files), ':когда', ({файл}) => file.language === 'JavaScript' ], ({file}) => file.filename)
Довольно кратко, правда? Я имею в виду, я так думаю. Жаль, что требуется «_.values», потому что «gist.files» — это объект, но это просто форма данных. Объект не является итерируемым, возможно, в будущем я мог бы изменить API для автоматического извлечения значений из объектов. Этот вызов создает генератор, который содержит то же содержимое, что и первоначальный вызов, вы можете расширить его с помощью «[…result]».