Skip to content

Commit

Permalink
feat(facade/collections): add fill ponyfill to ListWrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
Hotell committed Apr 10, 2016
1 parent 42b466a commit 6a590b1
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 3 deletions.
59 changes: 56 additions & 3 deletions src/facade/collections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,62 @@ export class ListWrapper {

static isEmpty( list: any[] ): boolean { return list.length == 0; }

//static fill(list: any[], value: any, start: number = 0, end: number = null) {
// list.fill(value, start, end === null ? list.length : end);
//}
static fill( list: any[], value: any, start: number = 0, end: number = null ) {

if ( !(Array.prototype as any).fill ) {
(Array.prototype as any).fill = function ( value ) {

// Steps 1-2.
if ( this == null ) {
throw new TypeError( 'this is null or not defined' );
}

var O = Object( this );

// Steps 3-5.
var len = O.length >>> 0;

// Steps 6-7.
var start = arguments[ 1 ];
var relativeStart = start >> 0;

// Step 8.
var k = relativeStart < 0
? Math.max( len + relativeStart, 0 )
: Math.min( relativeStart, len );

// Steps 9-10.
var end = arguments[ 2 ];
var relativeEnd = end === undefined
? len
: end >> 0;

// Step 11.
var final = relativeEnd < 0
? Math.max( len + relativeEnd, 0 )
: Math.min( relativeEnd, len );

// Step 12.
while ( k < final ) {
O[ k ] = value;
k++;
}

// Step 13.
return O;
};
}

(list as any).fill(
value,
start,
end === null
? list.length
: end
);

}

static equals( a: any[], b: any[] ): boolean {
if ( a.length != b.length ) return false;
for ( var i = 0; i < a.length; ++i ) {
Expand Down
23 changes: 23 additions & 0 deletions test/facade/collections.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,29 @@ describe( `facade/collections`, ()=> {

} );

it( `should fill array with provided value`, () => {

let arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4 );
expect( arr ).to.deep.equal( [ 4, 4, 4 ] );
arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4, 1 );
expect( arr ).to.deep.equal( [ 1, 4, 4 ] );
arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4, 1, 2 );
expect( arr ).to.deep.equal( [ 1, 4, 3 ] );
arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4, 1, 1 );
expect( arr ).to.deep.equal( [ 1, 2, 3 ] );
arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4, -3, -2 );
expect( arr ).to.deep.equal( [ 4, 2, 3 ] );
arr = [ 1, 2, 3 ];
ListWrapper.fill( arr, 4, NaN, NaN );
expect( arr ).to.deep.equal( [ 1, 2, 3 ] );

} );

} );

} );
Expand Down

0 comments on commit 6a590b1

Please sign in to comment.