Skip to content

Commit 8132ae1

Browse files
author
Brian Vaughn
committed
Optimized for-loops in UnorderedSearchIndex search()
1 parent 06b844f commit 8132ae1

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

source/SearchIndex/UnorderedSearchIndex.js

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,55 @@ export class UnorderedSearchIndex implements ISearchIndex {
1515
/**
1616
* @inheritDocs
1717
*/
18-
indexDocument(token : string, uid : string, document : Object) : void {
18+
indexDocument(token : string, uid : string, doc : Object) : void {
1919
if (!this._tokenToUidToDocumentMap[token]) {
2020
this._tokenToUidToDocumentMap[token] = {};
2121
}
2222

23-
this._tokenToUidToDocumentMap[token][uid] = document;
23+
this._tokenToUidToDocumentMap[token][uid] = doc;
2424
}
2525

2626
/**
2727
* @inheritDocs
2828
*/
2929
search(tokens : Array<string>, corpus : Array<Object>) : Array<Object> {
30-
var uidToDocumentMap : {[uid : string]:any} = {};
30+
var intersectingDocumentMap = {};
3131

3232
for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {
33-
var token:string = tokens[i];
34-
var currentUidToDocumentMap : {[uid : string] : any} = this._tokenToUidToDocumentMap[token] || {};
33+
var token = tokens[i];
34+
var documentMap = this._tokenToUidToDocumentMap[token] || {};
3535

3636
if (i === 0) {
37-
for (var uid in currentUidToDocumentMap) {
38-
uidToDocumentMap[uid] = currentUidToDocumentMap[uid];
37+
var keys = Object.keys(documentMap);
38+
var numKeys = keys.length;
39+
40+
for (var i = 0; i < numKeys; i++) {
41+
var uid = keys[i];
42+
43+
intersectingDocumentMap[uid] = documentMap[uid];
3944
}
4045
} else {
41-
for (var uid in uidToDocumentMap) {
42-
if (!currentUidToDocumentMap[uid]) {
43-
delete uidToDocumentMap[uid];
46+
var keys = Object.keys(intersectingDocumentMap);
47+
var numKeys = keys.length;
48+
49+
for (var i = 0; i < numKeys; i++) {
50+
var uid = keys[i];
51+
52+
if (!documentMap[uid]) {
53+
delete intersectingDocumentMap[uid];
4454
}
4555
}
4656
}
4757
}
4858

49-
var documents : Array<Object> = [];
59+
var keys = Object.keys(intersectingDocumentMap);
60+
var numKeys = keys.length;
61+
var documents = [];
62+
63+
for (var i = 0; i < numKeys; i++) {
64+
var uid = keys[i];
5065

51-
for (var uid in uidToDocumentMap) {
52-
documents.push(uidToDocumentMap[uid]);
66+
documents.push(intersectingDocumentMap[uid]);
5367
}
5468

5569
return documents;

0 commit comments

Comments
 (0)