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() {
...