From 87818de467c3d7ba6817c85dec10bf8f7ab02918 Mon Sep 17 00:00:00 2001 From: Cory Carlson Date: Sat, 6 Oct 2018 21:12:49 -0500 Subject: [PATCH] Added Min (#61) --- index.d.ts | 2 ++ index.js | 2 ++ src/Min.js | 9 +++++++++ test/Min.spec.js | 20 ++++++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 src/Min.js create mode 100644 test/Min.spec.js diff --git a/index.d.ts b/index.d.ts index 7d6de38..9be2588 100644 --- a/index.d.ts +++ b/index.d.ts @@ -24,6 +24,8 @@ interface Array { equalityComparer: IEqualityComparer ); Last(): T; + Min(): number; + Min(xform: (x: T) => number): T; Max(): number; Max(xform: (x: T) => number): T; Prepend(element: T): Array; diff --git a/index.js b/index.js index 5e3c754..59a8c12 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ const Empty = require('./src/Empty') const First = require('./src/First'); const GroupJoin = require('./src/GroupJoin'); const Last = require('./src/Last'); +const Min = require('./src/Min'); const Max = require('./src/Max'); const Prepend = require('./src/Prepend'); const Reverse = require('./src/Reverse'); @@ -28,6 +29,7 @@ const bindAll = function() { Array.prototype.First = First; Array.prototype.GroupJoin = GroupJoin; Array.prototype.Last = Last; + Array.prototype.Min = Min; Array.prototype.Max = Max; Array.prototype.Prepend = Prepend; Array.prototype.Reverse = Reverse; diff --git a/src/Min.js b/src/Min.js new file mode 100644 index 0000000..b1b7aa9 --- /dev/null +++ b/src/Min.js @@ -0,0 +1,9 @@ +/** + * @template T + * @param {((x: T) => number)} xform + * @returns {T} + */ +function Min(xform = x => x) { + return this.reduce((a, b) => (xform(a) < xform(b) ? a : b)); +} +module.exports = Min; diff --git a/test/Min.spec.js b/test/Min.spec.js new file mode 100644 index 0000000..e3ea1b5 --- /dev/null +++ b/test/Min.spec.js @@ -0,0 +1,20 @@ +const expect = require('chai').expect; +require('..')(); +describe('Array#prototype#Min', function() { + const numInput = [1, 2, 3, 4, 5, 6]; + it('Should return the min value in number array', function() { + const expected = 1; + const actual = numInput.Min(); + expect(actual).to.eql(expected); + }); + const objInput = [ + { name: 'Bill', age: 32 }, + { name: 'Jim', age: 13 }, + { name: 'Bart', age: 25 } + ]; + it('Should return the object with the min property value in object array', function() { + const expected = { name: 'Jim', age: 13 }; + const actual = objInput.Min(x => x.age); + expect(actual).to.eql(expected); + }); +});