In this article I will present some code I just did in my SimpleTsLinq library, which you can easily install using Npm.
The library is here on Npmjs.com :
The ToDictionary method looks like this:
if (!Array.prototype.ToDictionary) {
Array.prototype.ToDictionary = function <T>(keySelector: (arg: T) => any): any {
let hash = {};
this.map(item => {
let key = keySelector(item);
if (!(key in hash)) {
hash[key] = item;
}
else {
if (!(Array.isArray(hash[key]))) {
hash[key] = [hash[key]];
}
hash[key].push(item);
}
});
return hash;
}
}
Here is a unit test (spec) for this method :
it('can apply method ToDictionary on an array, allowing specificaton of a key selector for the dictionary object', () => {
let heroes = [{ name: "Han Solo", age: 47, gender: "M" }, { name: "Leia", age: 29, gender: "F" }, { name: "Luke", age: 24, gender: "M" }, { name: "Lando", age: 47, gender: "M" }];
let dictionaryOfHeroes = heroes.ToDictionary<Hero>(x => x.gender);
let expectedDictionary = {
"F": {
name: "Leia", age: 29, gender: "F"
},
"M": [
{ name: "Han Solo", age: 47, gender: "M" },
{ name: "Luke", age: 24, gender: "M" },
{ name: "Lando", age: 47, gender: "M" }
]
};
expect(dictionaryOfHeroes).toEqual(expectedDictionary);
});
You can also test out this library using Npm RunKit here:
We can make a dictionary with different keys, image example:
Npm runkit link:
ReplyDeletehttps://npm.runkit.com/simpletslinq