diff --git a/src/builtin/filters/array.ts b/src/builtin/filters/array.ts index 8cf8a331aa..ab0a04be69 100644 --- a/src/builtin/filters/array.ts +++ b/src/builtin/filters/array.ts @@ -9,8 +9,8 @@ export default { 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg), 'size': (v: string | any[]) => v.length, 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg), - 'slice': (v: T[], begin: number, length: number): T[] => { - if (length === undefined) length = 1 + 'slice': (v: T[], begin: number, length: number = 1): T[] => { + begin = begin < 0 ? v.length + begin : begin return v.slice(begin, begin + length) }, 'uniq': function (arr: T[]): T[] { diff --git a/test/integration/builtin/filters/array.ts b/test/integration/builtin/filters/array.ts index 5d2c2ba5a0..cb8e7bc816 100644 --- a/test/integration/builtin/filters/array.ts +++ b/test/integration/builtin/filters/array.ts @@ -43,6 +43,7 @@ describe('filters/array', function () { it('should slice third char by 2', () => test('{{ "Liquid" | slice: 2 }}', 'q')) it('should slice substr by 2,5', () => test('{{ "Liquid" | slice: 2, 5 }}', 'quid')) it('should slice substr by -3,2', () => test('{{ "Liquid" | slice: -3, 2 }}', 'ui')) + it('should slice substr by -2,2', () => test('{{ "abc" | slice: -2, 2 }}', 'bc')) it('should support array', () => test('{{ "1,2,3,4" | split: "," | slice: 1,2 | join }}', '2 3')) }) it('should support sort', function () {