Add values iterator in InstanceSet

This commit is contained in:
Zaid Abdulla committed 2016-10-24 17:30:08 -07:00
1 parent 15437361e1
commit b01f3d394e
1 file changed
+34 -30
+34 -30
View File
@@ -36,14 +36,14 @@ class InstanceSet {
for (let inst of this.set) { for (let inst of this.set) {
let match = true; let match = true;
for (let k in instance) { for (let k in instance) {
if (inst[k] !== instance[k]) { if (inst[k] !== instance[k]) {
match = false; match = false;
break; break;
} }
} }
if (match) if (match)
res.push(inst); res.push(inst);
} }
res.sort(function(a, b) { res.sort(function(a, b) {
@@ -51,20 +51,20 @@ class InstanceSet {
let keysB = Object.keys(b); let keysB = Object.keys(b);
if (keysA.length != keysB.length) if (keysA.length != keysB.length)
return keysB.length - keysA.length; return keysB.length - keysA.length;
keysA.sort(); keysA.sort();
keysB.sort(); keysB.sort();
for (let i = 0; i < keysA.length; ++ i) { for (let i = 0; i < keysA.length; ++ i) {
if (keysA[i] > keysB[i]) if (keysA[i] > keysB[i])
return 1; return 1;
else if (keysA[i] < keysB[i]) else if (keysA[i] < keysB[i])
return -1; return -1;
else if (a[keysA[i]] > b[keysB[i]]) else if (a[keysA[i]] > b[keysB[i]])
return 1; return 1;
else if (a[keysA[i]] < b[keysB[i]]) else if (a[keysA[i]] < b[keysB[i]])
return -1; return -1;
} }
return 0; return 0;
@@ -75,18 +75,18 @@ class InstanceSet {
subset(instance) { subset(instance) {
let res = []; let res = [];
for (let inst of this.set) { for (let inst of this.set) {
let match = true; let match = true;
for (let k in inst) { for (let k in inst) {
if (inst[k] !== instance[k]) { if (inst[k] !== instance[k]) {
match = false; match = false;
break; break;
} }
} }
if (match) if (match)
res.push(inst); res.push(inst);
} }
res.sort(function(a, b) { res.sort(function(a, b) {
@@ -94,31 +94,35 @@ class InstanceSet {
let keysB = Object.keys(b); let keysB = Object.keys(b);
if (keysA.length != keysB.length) if (keysA.length != keysB.length)
return keysA.length - keysB.length; return keysA.length - keysB.length;
keysA.sort(); keysA.sort();
keysB.sort(); keysB.sort();
for (let i = 0; i < keysA.length; ++ i) { for (let i = 0; i < keysA.length; ++ i) {
if (keysA[i] > keysB[i]) if (keysA[i] > keysB[i])
return 1; return 1;
else if (keysA[i] < keysB[i]) else if (keysA[i] < keysB[i])
return -1; return -1;
else if (a[keysA[i]] > b[keysB[i]]) else if (a[keysA[i]] > b[keysB[i]])
return 1; return 1;
else if (a[keysA[i]] < b[keysB[i]]) else if (a[keysA[i]] < b[keysB[i]])
return -1; return -1;
} }
return 0; return 0;
}); });
return res; return res;
} }
forEach(callback) { forEach(callback) {
return this.set.forEach(callback); return this.set.forEach(callback);
} }
values() {
return this.set.values();
}
} }
module.exports = InstanceSet; module.exports = InstanceSet;