JSFiddle - React, Tailwind, and code Playground

by bartek

HTML

<script src="https://searls.github.io/jasmine-all/jasmine-all-min.js"></script>

JavaScript

window.GFT = {
  forEach: function(collection, fn, context) {
    try {
      for (var i = 0; i < collection.length; i++) {
        if (i in collection) {
          fn.call(context, collection[i], i, collection);
        }
      }
    } catch (e) {
      if (e !== '__break__') throw e;
    }
    return collection;
  },
  create: function(number, fn) {
    var results = [];
    for (var i = 0; i < number; i++) {
      results.push(fn.call(number, i));
    }
    return results;
  },
  map: function(arr, fn, context) {
    var results = [];
    GFT.forEach(arr, function(value, index) {
      results.push(fn.call(context, value, index));
    });
    return results;
  },
  every: function(arr, fn, context) {
    var result = true;
    this.forEach(arr, function(value, index) {
      result = result && !!fn.call(context, value, index, arr);
      if (!result) throw '__break__';
    });
    return result;
  },
  none: function(arr, fn, context) {
    var result = true;
    this.forEach(arr, function(value, index) {
      result = result && !fn.call(context, value, index, arr);
      if (!result) throw '__break__';
    });
    return result;
  },
  uniq: function(arr, fn, context) {
    var results = [];
    this.forEach(arr, function(value, index) {
      var integer = fn.call(context, value, index);
      if (results.indexOf(integer) === -1) {
        results.push(value);
      }
    });
    return results;
  },
  add: function(arr) {
    return arr.concat([].slice.call(arguments, 1));
  }
};

describe('Module test', function() {
  xit('create', function() {
    var newArr = GFT.create(5, function(index) {
      return index + 5;
    });
    expect(newArr).toEqual([5, 6, 7, 8, 9]);
  });
  xit('map', function() {
    var arr = [1, 2, 3, 4, 5];
    var newArray = GFT.map(arr, function(value, index, array) {
      return value * 2;
    }, {
      context: true
    });
    expect(newArray).toEqual([2, 4, 6, 8, 10]);
  });
  xit('every', function() {
    var arr =...