mirror of
https://github.com/musix-org/musix-oss
synced 2024-11-14 03:30:18 +00:00
24 lines
721 B
JavaScript
24 lines
721 B
JavaScript
|
'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;
|
||
|
};
|