Spreadsheet: Add CommonRange#unique()

This commit is contained in:
u9g 2022-03-05 19:56:46 -05:00 committed by Ali Mohammad Pur
parent b9d44eb022
commit c8803afe3e
2 changed files with 28 additions and 0 deletions

View file

@ -197,6 +197,19 @@ class CommonRange {
});
return new SplitRange(cells);
}
unique() {
const cells = [];
const values = new Set();
this.forEach(cell => {
const value = cell.value();
if (!values.has(value)) {
values.add(value);
cells.push(cell);
}
});
return new SplitRange(cells);
}
}
class SplitRange extends CommonRange {

View file

@ -198,6 +198,21 @@ describe("SplitRange", () => {
expect(numericResolve(range)).toEqual([1, 3, 1, 9]);
expect(count(range)).toEqual(4);
});
test("Range#unique => SplitRange", () => {
makeSheet();
const origRange = R`A0:B`;
const uniqueRange = origRange.unique();
expect(uniqueRange.toString()).toEqual(
'SplitRange.fromNames("A0", "A1", "A2", "B1", "B2")'
);
const uniqueCount = count(uniqueRange);
// We expect that making a set (unique array) of the original range should equal the length of our unique range
expect(new Set(resolve(origRange)).size).toEqual(uniqueCount);
expect(uniqueCount).toEqual(5);
});
});
describe("R function", () => {