underscore objects
for educational purpose
by aniketmhatre88
Babel + JSX
let _ = {
keys(obj) {
Object.keys(obj);
},
allKeys(obj) {
let keys = [];
for(key in obj) {
keys.push(key);
}
return keys;
},
values(obj){
let keys = Object.keys(obj);
return keys.map(function(key) {
return obj[key];
});
},
mapObject(obj, func, context) {
let keys = Object.keys(obj);
for(let i=0; i<keys.length; i++) {
let key = keys[i];
obj[key] = func.call(context||this, obj[key], key);
}
},
pairs(obj){
let keys = Object.keys(obj);
return keys.map(function(key) {
return [key, obj[key]];
});
},
invert(obj){
let keys = Object.keys(obj),
newObj = {};
for(let i = 0; i<keys.length; i++) {
let key = keys[i];
newObj[obj[key]] = key;
}
return newObj;
},
create(proto, props) {
if (typeof proto !== 'object' || Array.isArray(proto)) {
return {};
}
let newObj = Object.create(proto),
keys = Object.keys(props);
for(let i= 0; i<keys.length;i++) {
let key = keys[i];
newObj[key] = props[key];
}
return newObj;
},
functions(obj) {
let methods = [],
keys = Object.keys(obj);
for(let i=0; i<keys.length; i++) {
let key = keys[i];
if (typeof obj[key] === 'function') {
methods.push(key);
}
}
return methods;
},
findKey(obj, predicate, context) {
let keys = Object.keys(obj);
for(let i = 0; i< keys.length; i++) {
let key = keys[i];
if(predicate.call(this || context, key, obj[key])) {
return key;
}
}
},
extend() {
let destination = arguments[0];
for(let i=1; i< arguments.length; i++) {
let source = arguments[i];
for(let prop in source) {
destination[prop] = source[prop];
}
}
},
extendOwn() {
...