You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
721 B
23 lines
721 B
'use strict';
|
|
var anObject = require('../internals/an-object');
|
|
|
|
// `Map.prototype.upsert` method
|
|
// https://github.com/thumbsupep/proposal-upsert
|
|
module.exports = function upsert(key, updateFn /* , insertFn */) {
|
|
var map = anObject(this);
|
|
var insertFn = arguments.length > 2 ? arguments[2] : undefined;
|
|
var value;
|
|
if (typeof updateFn != 'function' && typeof insertFn != 'function') {
|
|
throw TypeError('At least one callback required');
|
|
}
|
|
if (map.has(key)) {
|
|
value = map.get(key);
|
|
if (typeof updateFn == 'function') {
|
|
value = updateFn(value);
|
|
map.set(key, value);
|
|
}
|
|
} else if (typeof insertFn == 'function') {
|
|
value = insertFn();
|
|
map.set(key, value);
|
|
} return value;
|
|
};
|
|
|