Allow partial list of ids for sortByIds
This commit is contained in:
parent
8743d75999
commit
085bb94505
32
lib/dao.js
32
lib/dao.js
|
@ -351,19 +351,29 @@ DataAccessObject.sortByIds = function(ids, results) {
|
||||||
return (typeof id === 'object') ? id.toString() : id;
|
return (typeof id === 'object') ? id.toString() : id;
|
||||||
});
|
});
|
||||||
|
|
||||||
results.sort(function(x, y) {
|
var indexOf = function(x) {
|
||||||
var idA = (typeof x[pk] === 'object') ? x[pk].toString() : x[pk];
|
var id = (typeof x[pk] === 'object') ? x[pk].toString() : x[pk];
|
||||||
var idB = (typeof y[pk] === 'object') ? y[pk].toString() : y[pk];
|
return ids.indexOf(id);
|
||||||
var a = ids.indexOf(idA);
|
};
|
||||||
var b = ids.indexOf(idB);
|
|
||||||
if (a === -1 || b === -1) return 1; // last
|
var heading = [];
|
||||||
if (a !== b) {
|
var tailing = [];
|
||||||
if (a > b) return 1;
|
|
||||||
if (a < b) return -1;
|
results.forEach(function(x) {
|
||||||
}
|
var idx = indexOf(x);
|
||||||
|
idx === -1 ? tailing.push(x) : heading.push(x);
|
||||||
});
|
});
|
||||||
|
|
||||||
return results;
|
heading.sort(function(x, y) {
|
||||||
|
var a = indexOf(x);
|
||||||
|
var b = indexOf(y);
|
||||||
|
if (a === -1 || b === -1) return 1; // last
|
||||||
|
if (a === b) return 0;
|
||||||
|
if (a > b) return 1;
|
||||||
|
if (a < b) return -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
return heading.concat(tailing);
|
||||||
};
|
};
|
||||||
|
|
||||||
function convertNullToNotFoundError(ctx, cb) {
|
function convertNullToNotFoundError(ctx, cb) {
|
||||||
|
|
|
@ -87,6 +87,33 @@ describe('basic-querying', function () {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should sortByIds', function(done) {
|
||||||
|
User.find(function(err, users) {
|
||||||
|
sorted = User.sortByIds([6, 5, 4, 3, 2, 1], users);
|
||||||
|
var names = sorted.map(function(u) { return u.name; });
|
||||||
|
names.should.eql(['f', 'e', 'd', 'c', 'b', 'a']);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sortByIds - partial ids (1)', function(done) {
|
||||||
|
User.find(function(err, users) {
|
||||||
|
sorted = User.sortByIds([6, 5, 4], users);
|
||||||
|
var names = sorted.map(function(u) { return u.name; });
|
||||||
|
names.should.eql(['f', 'e', 'd', 'a', 'b', 'c']);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sortByIds - partial ids (2)', function(done) {
|
||||||
|
User.find(function(err, users) {
|
||||||
|
sorted = User.sortByIds([5, 3, 2], users);
|
||||||
|
var names = sorted.map(function(u) { return u.name; });
|
||||||
|
names.should.eql(['e', 'c', 'b', 'a', 'd', 'f']);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue