01.03.2015, 22:17
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
RecursiveIterator / Рекурсивный итератор
В продолжении темы Object.traverse() запилил рекурсивный итератор.
https://github.com/nervgh/recursive-iterator
Можно использовать как в ES5, так и в ES6 окружениях.
При использовании в ES6:
- поддерживает ES6 итерационные протоколы
- совместим с for...of циклом
Пример на es6:
var root = {
object: {
number: 1
},
string: 'foo'
};
for(let item of new RecursiveIterator(root)) {
console.log(item.path.join('.'), item.node);
}
// or
for(let {parent, node, key, path, deep} of new RecursiveIterator(root)) {
console.log(path.join('.'), node);
}
// or
for(let {node, path} of new RecursiveIterator(root, 1)) {
console.log(path.join('.'), node);
}
Больше инфы здесь
Теги: js, javascript, walk, walker, recursive, recursion, iterator, iteratate, traverse, traversing, object, tree, json
Последний раз редактировалось nerv_, 04.03.2015 в 19:51.
|
|
04.03.2015, 11:55
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Обновил до версии 1.0.0.
- произведен глобальный рефакторинг в результате которого, инератор стал проще, читабельней и, надеюсь, быстрее
- введен параметр максимальной глубины погружения
- добавлены и описаны в документации методы
- добавлен коллбек onStepInto(), который позволяет гибко управлять обходом объектов
- возможность изменения объектов на месте
- больше тестов
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
04.03.2015, 12:02
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Можно использовать совместно с Collection, включая потоки
$C(new RecursiveIterator(root)).get({
use: 'for of',
thread: true,
filter: 'someFilter1 && !someFilter2'
}).onComplete = function (data) {
...
};
Последний раз редактировалось kobezzza, 04.03.2015 в 13:53.
|
|
04.03.2015, 18:22
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от kobezzza
|
Можно использовать совместно с Collection
|
круто
А разве Collection сам не может "рекурсивно" перебирать объекты?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
04.03.2015, 18:44
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от nerv_
|
- больше тестов
|
покрытие ?
|
|
04.03.2015, 19:49
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от melky
|
покрытие ?
|
Если речь идет о проценте покрытия, то я не знаю как его считать. Думаю, 70-80.
У kobezzza в coverage в collection заявлен процент 73. Любопытно, как он его получил
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
04.03.2015, 21:27
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
А разве Collection сам не может "рекурсивно" перебирать объекты
|
Коробочных механизмов обхода деревьев нет, т.е. чтобы сделать это нужно явно задать рекурсию, например рекурсивный reduce, и т.д. или использовать итератор в качестве данных (как в твоём случае).
Цитата:
|
У kobezzza в coverage в collection заявлен процент 73. Любопытно, как он его получил
|
На самом деле где-то 85%, просто лень было PhantomJS заряжать для тестов. Покрытие оценивается библиотекой Istanbul, но следует заметить, что это покрытие кода, а не вариантов его использования. Сейчас в Collection около 1.5к тестов.
|
|
04.03.2015, 23:06
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от kobezzza
|
На самом деле где-то 85%, просто лень было PhantomJS заряжать для тестов. Покрытие оценивается библиотекой Istanbul, но следует заметить, что это покрытие кода, а не вариантов его использования. Сейчас в Collection около 1.5к тестов.
|
для ES6 я пользуюсь isparta... istanbul не умеет ES6 инструментировать
|
|
05.03.2015, 00:29
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от melky
|
для ES6 я пользуюсь isparta... istanbul не умеет ES6 инструментировать
|
А у меня babel + istanbul, а isparta тоже включает транслятор что ли?
upd: глянул доку, так и есть - это просто istanbul + babel
|
|
05.03.2015, 11:41
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от kobezzza
|
Коробочных механизмов обхода деревьев нет
|
кажется, я понял почему
kobezzza, зарегай свои наработки в npm & bower для продвижения (если еще этого не сделал.) и напиши про это в readme
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
|
|