Я автор graph datastructure library для JavaScript. Я в настоящее время ES6-ifying библиотеки.Условные обозначения для повторений ES6?
Я также хочу сделать его более удобным для программистов ES6, что означает реализацию iterable protocol. Но граф имеет несколько вещей для перебора и множественные способы их итерации (вершины, ребра, преемники, предшественники, вершины в топологическом порядке и т. Д.)
У меня есть идея о том, как создать этот интерфейс, но Я бы хотел следовать существующим соглашениям, если они существуют. Вот пример того, как я мог бы сделать часть «вершин»:
class JsGraph {
// ...
get vertices() {
return {
_graph: this,
get length() { return this._graph._vertexCount },
*[Symbol.iterator]() {
var keys = Object.keys(this._graph._vertices);
for (let i = 0; i < keys.length; ++i) {
yield [keys[i], this._graph._vertices[keys[i]]];
}
}
};
}
// ...
}
Если есть какие-либо existng конвенции я, вероятно, следует следовать (или какие-либо проблемы с этим кодом), ваша обратная связь была бы оценена.
Спасибо! Весьма полезно повсюду. ** [1] ** Если 'Map' и' Set' используют нотацию функции-вызова для получения конкретных итераторов, я сделаю то же самое. ** [2] ** В этом случае наличие права на свойство .length' (чтобы оно выглядело как массив) несколько утратило свою привлекательность, поэтому я также буду советоваться с вами. ** [3] ** Очень хорошая точка. Я, вероятно, буду консервативен в своих спецификациях. Гарантии, сделанные перечислениями объектов, кажутся достижимыми. – mhelvens
«Во-вторых, итераторы по изменяемым данным являются областями для реализации», структуры данных копирования и записи и/или моментальные снимки могут быть полезны в некоторых случаях, аналогично нежирным DOM-спискам DOM. – the8472