From 228f7f746e7e62ea5e8e8d45ca5ebf330828f2ad Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Mon, 22 Aug 2022 15:32:13 +0300 Subject: [PATCH] added filter/map/reduce to Set -- odd that I did not notice they were missing untill now... Signed-off-by: Alex A. Naanou --- Set.js | 24 ++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Set.js b/Set.js index 55d0c0e..68d148d 100644 --- a/Set.js +++ b/Set.js @@ -8,11 +8,29 @@ /*********************************************************************/ var object = require('ig-object') +var stoppable = require('ig-stoppable') /*********************************************************************/ +// Wrap .map(..) / .filter(..) / .reduce(..) / .. to support STOP... +// +// NOTE: internally these are implemented as for-of loops (./generator.js) +var stoppableSet = function(iter){ + return function(func){ + return new Set([...this][iter](...arguments)) } } +var stoppableValue = function(iter, no_return=false){ + return function(func){ + var res = [...this][iter](...arguments) + return no_return ? + undefined + : res } } + + + +//--------------------------------------------------------------------- + var SetProtoMixin = module.SetProtoMixin = object.Mixin('SetMixin', 'soft', { @@ -110,6 +128,12 @@ object.Mixin('SetMixin', 'soft', { this.sort(order) return removed }, + + filter: stoppableSet('filter'), + map: stoppableSet('map'), + reduce: stoppableValue('reduce'), + reduceRight: stoppableValue('reduceRight'), + forEach: stoppableValue('map', true), }) diff --git a/package.json b/package.json index 8c7b2a2..e00d5f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.18.0", + "version": "6.19.0", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {