diff --git a/lib/utils.js b/lib/utils.js index 087cd615..6afb9129 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -208,7 +208,7 @@ function isPlainObject(obj) { -function sortObjectsByIds(idName, ids, objects) { +function sortObjectsByIds(idName, ids, objects, strict) { ids = ids.map(function(id) { return (typeof id === 'object') ? id.toString() : id; }); @@ -225,6 +225,7 @@ function sortObjectsByIds(idName, ids, objects) { objects.forEach(function(x) { if (typeof x === 'object') { var idx = indexOf(x); + if (strict && idx === -1) return; idx === -1 ? tailing.push(x) : heading.push(x); } }); diff --git a/test/util.test.js b/test/util.test.js index 37da6fe5..f933190a 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -206,9 +206,15 @@ describe('sortObjectsByIds', function () { }); it('should sort - partial ids', function() { - var sorted =sortObjectsByIds('id', [5, 3, 2], items); + var sorted = sortObjectsByIds('id', [5, 3, 2], items); var names = sorted.map(function(u) { return u.name; }); should.deepEqual(names, ['e', 'c', 'b', 'a', 'd', 'f']); }); + + it('should sort - strict', function() { + var sorted = sortObjectsByIds('id', [5, 3, 2], items, true); + var names = sorted.map(function(u) { return u.name; }); + should.deepEqual(names, ['e', 'c', 'b']); + }); -}); \ No newline at end of file +});