From 160522c52020da73faf64564de904b8da242379c Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Sat, 18 Apr 2015 22:04:37 +0200 Subject: [PATCH] Collection iteration more similar to Map. --- packages/xo-collection/src/collection.js | 16 ++++++++++++++++ packages/xo-collection/src/collection.spec.js | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/packages/xo-collection/src/collection.js b/packages/xo-collection/src/collection.js index 7aff7bbb9..77e997d32 100644 --- a/packages/xo-collection/src/collection.js +++ b/packages/xo-collection/src/collection.js @@ -163,6 +163,22 @@ export default class Collection extends EventEmitter { * [Symbol.iterator] () { const {_items: items} = this + for (let key in items) { + yield [key, items[key]] + } + } + + * keys () { + const {_items: items} = this + + for (let key in items) { + yield key + } + } + + * values () { + const {_items: items} = this + for (let key in items) { yield items[key] } diff --git a/packages/xo-collection/src/collection.spec.js b/packages/xo-collection/src/collection.spec.js index 03f36d153..80ff2a3dc 100644 --- a/packages/xo-collection/src/collection.spec.js +++ b/packages/xo-collection/src/collection.spec.js @@ -39,8 +39,26 @@ describe('Collection', function () { it('is iterable', function () { const iterator = this.col[Symbol.iterator]() + expect(iterator.next()).to.eql({done: false, value: ['bar', 0]}) + expect(iterator.next()).to.eql({done: true, value: undefined}) + }) + + describe('#keys()', function () { + it('returns an iterator over the keys', function () { + const iterator = this.col.keys() + + expect(iterator.next()).to.eql({done: false, value: 'bar'}) + expect(iterator.next()).to.eql({done: true, value: undefined}) + }) + }) + + describe('#values()', function () { + it('returns an iterator over the values', function () { + const iterator = this.col.values() + expect(iterator.next()).to.eql({done: false, value: 0}) expect(iterator.next()).to.eql({done: true, value: undefined}) + }) }) describe('#add()', function () {