94 lines
2.1 KiB
Plaintext
94 lines
2.1 KiB
Plaintext
/* object.cm - object creation and manipulation utilities */
|
|
|
|
var _keys = array
|
|
var _create = meme
|
|
var _assign = Object.assign
|
|
var _isArray = function(val) { return isa(val, array) }
|
|
var _values = Object.values
|
|
|
|
function object(arg, arg2) {
|
|
// object(object) - shallow mutable copy
|
|
if (isa(arg, object) && arg2 == null) {
|
|
var result = {}
|
|
var keys = _keys(arg)
|
|
for (var i = 0; i < keys.length; i++) {
|
|
result[keys[i]] = arg[keys[i]]
|
|
}
|
|
return result
|
|
}
|
|
|
|
// object(object, another_object) - combine
|
|
if (isa(arg, object) && isa(arg2, object)) {
|
|
var result = {}
|
|
var keys = _keys(arg)
|
|
for (var i = 0; i < keys.length; i++) {
|
|
result[keys[i]] = arg[keys[i]]
|
|
}
|
|
keys = _keys(arg2)
|
|
for (var i = 0; i < keys.length; i++) {
|
|
result[keys[i]] = arg2[keys[i]]
|
|
}
|
|
return result
|
|
}
|
|
|
|
// object(object, array_of_keys) - select
|
|
if (isa(arg, object) && _isArray(arg2)) {
|
|
var result = {}
|
|
for (var i = 0; i < arg2.length; i++) {
|
|
var key = arg2[i]
|
|
if (typeof key == 'string' && key in arg) {
|
|
result[key] = arg[key]
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// object(array_of_keys) - set with true values
|
|
if (_isArray(arg) && arg2 == null) {
|
|
var result = {}
|
|
for (var i = 0; i < arg.length; i++) {
|
|
var key = arg[i]
|
|
if (typeof key == 'string') {
|
|
result[key] = true
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// object(array_of_keys, value) - value set
|
|
// object(array_of_keys, function) - functional value set
|
|
if (_isArray(arg) && arg2 != null) {
|
|
var result = {}
|
|
if (typeof arg2 == 'function') {
|
|
for (var i = 0; i < arg.length; i++) {
|
|
var key = arg[i]
|
|
if (typeof key == 'string') {
|
|
result[key] = arg2(key)
|
|
}
|
|
}
|
|
} else {
|
|
for (var i = 0; i < arg.length; i++) {
|
|
var key = arg[i]
|
|
if (typeof key == 'string') {
|
|
result[key] = arg2
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
object.values = function(obj)
|
|
{
|
|
return _values(obj)
|
|
}
|
|
|
|
object.assign = function(obj, ...args)
|
|
{
|
|
return _assign(obj, ...args)
|
|
}
|
|
|
|
return object
|