phaser/v3/src/structs/Map.js

167 lines
2.8 KiB
JavaScript
Raw Normal View History

// The keys of a Map can be arbitrary values.
/*
var map = new Map([
[ 1, 'one' ],
[ 2, 'two' ],
[ 3, 'three' ]
]);
*/
var Map = function (elements)
{
this.entries = {};
this.size = 0;
if (Array.isArray(elements))
{
for (var i = 0; i < elements.length; i++)
{
this.set(elements[i][0], elements[i][1]);
}
}
};
Map.prototype.constructor = Map;
Map.prototype = {
set: function (key, value)
{
if (!this.has(key))
{
this.entries[key] = value;
this.size++;
}
return this;
},
get: function (key)
{
if (this.has(key))
{
return this.entries[key];
}
},
has: function (key)
{
return (this.entries.hasOwnProperty(key));
},
delete: function (key)
{
if (this.has(key))
{
delete this.entries[key];
this.size--;
}
return this;
},
clear: function ()
{
Object.keys(this.entries).forEach(function (prop)
{
delete this.entries[prop];
});
this.size = 0;
return this;
},
keys: function ()
{
return Object.keys(this.entries);
},
values: function ()
{
var output = [];
var entries = this.entries;
for (var key in entries)
{
output.push(entries[key]);
}
return output;
},
dump: function ()
{
var entries = this.entries;
console.group('Map');
for (var key in entries)
{
console.log(key, entries[key]);
}
console.groupEnd();
},
each: function (callback)
{
var entries = this.entries;
for (var key in entries)
{
if (callback(key, entries[key]) === false)
{
break;
}
}
return this;
},
contains: function (value)
{
var entries = this.entries;
for (var key in entries)
{
if (entries[key] === value)
{
return true;
}
}
return false;
},
// Merges all new keys from the given Map into this one
// If it encounters a key that already exists it will be skipped
// unless override = true
merge: function (map, override)
{
if (override === undefined) { override = false; }
var local = this.entries;
var source = map.entries;
for (var key in source)
{
if (local.hasOwnProperty(key) && override)
{
local[key] = source[key];
}
else
{
this.set(key, source[key]);
}
}
return this;
}
};
module.exports = Map;