immutable-sorted
immutable-sorted copied to clipboard
Feature request: get-and-delete operation for SortedMap
I just today realized that Immutable.js doesn't provide an operation for this, though I really only need it for SortedMap. I would like a method on SortedMap that removes and returns the value under the given key as well as the updated map. In Flow the function prototype is straightforward:
getAndDelete(key: K): [?V, SortedMap<K, V>] {}
let [val, map] = map.getAndDelete('key');
Apparently in Immutable.js this can be done by returning null from the closure passed to Collection.update() (though this is undocumented) but SortedMap doesn't appear to support this; it just updates the value as null. I know this can be done with get() then delete() but I'd like to avoid the redundant lookup if possible.
Thank you for your suggestion, this would would definitely be more efficient than two separate calls. It would be nice to have it implemented across all the collections (List, Set, Map, OrderedSet, OrderedMap, SortedSet, SortedMap)
Please note, the get function includes optional notSetValue argument to distinguish the missing key in the map from the key having unusual values like null, undefined, {}, etc.:
get<NSV>(key: K, notSetValue: NSV): V | NSV;
Would it make sense to include this additional argument into getAndDelete()?
Would it make sense to include this additional argument into getAndDelete()?
It certainly wouldn't hurt though returning any falsey value is sufficient for my use-case. I'm not sure how default parameters interact with type parameters, though; is this valid syntax?
getAndDelete<NSV = ?V>(key: K, notSetValue: NSV = null): V | NSV {}
As for merging it upstream, I figure it would be easier to prototype here first before proposing it for Immutable.js. Implementing it on SortedMap would be enough for me either way.