diff --git a/src/vs/base/common/arrays.ts b/src/vs/base/common/arrays.ts index 589d6bbe7621b96c33ebd5c1f8c5174986b3e4c8..b068d41dba867673f578f6a5acbc72940bc5ae5e 100644 --- a/src/vs/base/common/arrays.ts +++ b/src/vs/base/common/arrays.ts @@ -157,7 +157,7 @@ export function distinct(array: T[], keyFn?: (t: T) => string): T[] { }); } - const seen: { [key: string]: boolean; } = {}; + const seen: { [key: string]: boolean; } = Object.create(null); return array.filter((elem) => { const key = keyFn(elem); if (seen[key]) { diff --git a/src/vs/base/test/common/arrays.test.ts b/src/vs/base/test/common/arrays.test.ts index e15ebcf6a24c7f0aed6407cdcf5cbaadddeed8d3..5aa002c5dfa181afbbdccce9926f7e757058596e 100644 --- a/src/vs/base/test/common/arrays.test.ts +++ b/src/vs/base/test/common/arrays.test.ts @@ -48,5 +48,17 @@ suite('Arrays', () => { assert.equal(arrays.binarySearch(array, 70, compare), ~10); }); + + test('distinct', function() { + function compare(a: string): string { + return a; + } + + assert.deepEqual(arrays.distinct(['32', '4', '5'], compare), ['32', '4', '5']); + assert.deepEqual(arrays.distinct(['32', '4', '5', '4'], compare), ['32', '4', '5']); + assert.deepEqual(arrays.distinct(['32', 'constructor', '5', '1'], compare), ['32', 'constructor', '5', '1']); + assert.deepEqual(arrays.distinct(['32', 'constructor', 'proto', 'proto', 'constructor'], compare), ['32', 'constructor', 'proto']); + assert.deepEqual(arrays.distinct(['32', '4', '5', '32', '4', '5', '32', '4', '5', '5'], compare), ['32', '4', '5']); + }); });