From c735bc84d1e686acd91eaa24a50d3e8f634e43af Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Wed, 23 Jun 2021 09:05:19 +0300 Subject: [PATCH] added .iter() to generators, sets and maps (compatibility with arrays)... Signed-off-by: Alex A. Naanou --- Map.js | 4 ++++ Promise.js | 3 +++ README.md | 20 ++++++++++++++++++++ Set.js | 4 ++++ generator.js | 8 ++++++++ package.json | 2 +- 6 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Map.js b/Map.js index 08ee2b4..6fbb7c8 100644 --- a/Map.js +++ b/Map.js @@ -16,6 +16,10 @@ var object = require('ig-object') var MapProtoMixin = module.MapProtoMixin = object.Mixin('MapProtoMixin', 'soft', { + iter: function*(){ + for(var e of this){ + yield e } }, + // NOTE: we do not touch .__keys here as no renaming is ever done... // // XXX this essentially rewrites the whole map, is there a faster/better diff --git a/Promise.js b/Promise.js index 507c1fb..db5e6b4 100644 --- a/Promise.js +++ b/Promise.js @@ -117,6 +117,9 @@ object.Constructor('IterablePromise', Promise, { return (e && e.flat) ? e.flat(depth) : e }) }, + // XXX do we need this??? + //iter: function(){ + // return this }, // XXX do we need: diff --git a/README.md b/README.md index 1272383..49ef5e3 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ Library of JavaScript type extensions, types and utilities. - [`generator.iter(..)`](#generatoriter) - [`generator.STOP`](#generatorstop) - [Generator instance iteration](#generator-instance-iteration) + - [`.iter()`](#generatoriter-1) - [`.map(..)` / `.filter(..)`](#generatormap--generatorfilter) - [`.reduce(..)` / `.greduce(..)`](#generatorreduce--generatorgreduce) - [`.slice(..)`](#generatorslice) @@ -91,6 +92,7 @@ Library of JavaScript type extensions, types and utilities. - [`.toArray()`](#generatortoarray) - [Treating iterators the same as generators](#treating-iterators-the-same-as-generators) - [Generator constructor iteration](#generator-constructor-iteration) + - [`.iter(..)`](#generatoriter-2) - [`.at(..)` / `.gat(..)`](#generatorat--generatorgat-1) - [`.shift()` / `.pop()` / `.gshift()` / `.gpop()`](#generatorshift--generatorpop--generatorgshift--generatorgpop-1) - [`.slice(..)`](#generatorslice-1) @@ -1739,6 +1741,17 @@ Chained generators handle items depth-first, i.e. the items are passed as they are yielded down the generator chain. +#### `.iter()` + +Iterate over the generator. +```bnf +.iter() + -> +``` + +This is here mainly for compatibility with [``'s `.iter()`](#arrayiter--arrayiter). + + #### `.map(..)` / `.filter(..)` Equivalents to `Array`'s `.map(..)`, `.filter(..)` and `.reduce(..)` but return @@ -1969,6 +1982,13 @@ XXX list the differences... --> +#### `.iter(..)` + +This is a shorthand to [`iter(..)`](#generatoriter). + +This is here mainly for compatibility with +[`Array`'s `.iter(..)`](#arrayiter--arrayiter). + #### `.at(..)` / `.gat(..)` ```bnf diff --git a/Set.js b/Set.js index 48753e6..55d0c0e 100644 --- a/Set.js +++ b/Set.js @@ -16,6 +16,10 @@ var object = require('ig-object') var SetProtoMixin = module.SetProtoMixin = object.Mixin('SetMixin', 'soft', { + iter: function*(){ + for(var e of this){ + yield e } }, + // Set set operation shorthands... unite: function(other=[]){ return new Set([...this, ...other]) }, diff --git a/generator.js b/generator.js index 8819e54..4d505d6 100644 --- a/generator.js +++ b/generator.js @@ -190,6 +190,10 @@ module.GeneratorMixin = object.Mixin('GeneratorMixin', 'soft', { STOP: object.STOP, + // NOTE: this is here for compatibility with Array.iter(..) + iter: function*(lst=[]){ + yield* module.iter(lst) }, + gat: makeGenerator('gat'), at: function(i){ var that = this @@ -263,6 +267,10 @@ object.Mixin('GeneratorMixin', 'soft', { var GeneratorProtoMixin = module.GeneratorProtoMixin = object.Mixin('GeneratorProtoMixin', 'soft', { + // NOTE: this is here for compatibility with [..].iter() + iter: function*(){ + yield* this }, + at: function(i){ return this.gat(i).next().value }, // XXX this needs the value to be iterable... why??? diff --git a/package.json b/package.json index c121adb..97e80e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.9.1", + "version": "6.9.2", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {