From e4056a79ee91067256a68a5c573cf5ccdf7fc2af Mon Sep 17 00:00:00 2001 From: ChenL Date: Thu, 16 Mar 2017 10:05:50 +0800 Subject: [PATCH] Test if an array contains a specific number/string. --- src/operators.js | 8 +++++++- test/syntax.js | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/operators.js b/src/operators.js index 11d44fe2f..f43cfa576 100644 --- a/src/operators.js +++ b/src/operators.js @@ -5,7 +5,13 @@ var operators = { '<': (l, r) => l < r, '>=': (l, r) => l >= r, '<=': (l, r) => l <= r, - 'contains': (l, r) => typeof l === 'string' ? l.indexOf(r) > -1 : false, + 'contains': (l, r) => { + return typeof l !== 'undefined' + ? typeof l.indexOf === 'function' + ? l.indexOf(r) > -1 + : false + : false; + }, 'and': (l, r) => l && r, 'or': (l, r) => l || r }; diff --git a/test/syntax.js b/test/syntax.js index 02cbe54dd..1426d8f5b 100644 --- a/test/syntax.js +++ b/test/syntax.js @@ -45,6 +45,8 @@ describe('expression', function() { expect(evalExp('x contains "X"', scope)).to.equal(true); expect(evalExp('1 contains "x"', scope)).to.equal(false); expect(evalExp('y contains "x"', scope)).to.equal(false); + expect(evalExp('(1..5) contains 3', scope)).to.equal(true); + expect(evalExp('(1..5) contains 6', scope)).to.equal(false); expect(evalExp('"<=" == "<="', scope)).to.equal(true); });