Skip to content

Instantly share code, notes, and snippets.

View kevboutin's full-sized avatar

Kevin Boutin kevboutin

View GitHub Profile
@kevboutin
kevboutin / clonetest.ts
Last active March 22, 2021 18:35
cloning objects in javascript
function cloneObject(obj: any): any {
switch (obj["constructor"]) {
case Date: return new Date(obj);
case Object: return Object.keys(obj).reduce<{ [key: string]: any }>((newObj, key) => (newObj[key] = cloneObject(obj[key]), newObj), {});
case Array: return obj.map(cloneObject);
}
return obj;
}
// Test
@kevboutin
kevboutin / enum_in_javascript.js
Last active December 11, 2021 07:24
Best way to do enum in JavaScript
// Season enums can be grouped as static members of a class
class Season {
// Create new instances of the same class as static attributes
static Summer = new Season("summer")
static Autumn = new Season("autumn")
static Winter = new Season("winter")
static Spring = new Season("spring")
constructor(name) {
this.name = name
@kevboutin
kevboutin / generateSasTokenUrl.js
Last active December 25, 2022 19:54
Generates a SAS token URL for a particular file in an Azure storage account
const {
BlobSASPermissions, generateBlobSASQueryParameters, StorageSharedKeyCredential,
} = require('@azure/storage-blob');
/**
* Generate a secure token URL for a particular file in a storage account.
*
* @param {string} accountName The name of the storage account.
* @param {string} accountKey The account key.
* @param {string} container The container.
@kevboutin
kevboutin / randomUuid.js
Created October 17, 2023 15:31
Generate a random UUID
/* This can be done by the uuid package, which is probably better than using Math.random(), but this is great for unit tests. */
const generateRandomUUID = (a) =>
a
? (a ^ ((Math.random() * 16) >> (a / 4))).toString(16)
: ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(
/[018]/g,
generateRandomUUID
);
console.log(generateRandomUUID()); // f138f635-acbd-4f78-9be5-ca3198c4cf34
console.log(generateRandomUUID()); // 8935bb0d-6503-441f-bb25-7bc685b5b5bc
@kevboutin
kevboutin / conditionalFlowControl.js
Created October 17, 2023 15:29
Conditional Flow Control
/* Instead of using this:
const getNumWord = (num) => {
if (num === 1) {
return 'one';
} else if (num === 2) {
return 'two';
} else if (num === 3) {
return 'three';
} else if (num === 4) {
return 'four';
@kevboutin
kevboutin / snakeToCamelCasing.js
Last active October 17, 2023 15:33
Convert string in snake case to came case
const snakeToCamelCase = (s) =>
s.toLowerCase().replace(/(_\w)/g, (w) => w.toUpperCase().substr(1));
const str1 = 'string_manipulation';
const str2 = 'one_liner';
console.log(snakeToCamelCase(str1)); // stringManipulation
console.log(snakeToCamelCase(str2)); // oneLiner
@kevboutin
kevboutin / jsonToMap.js
Created October 17, 2023 15:35
Convert JSON to a Map
const jsonToMap = (json) => new Map(Object.entries(JSON.parse(json)));
const json = '{"user1":"Alison","user2":"Kevin","user3":"James"}';
const map = jsonToMap(json);
// Kevin
console.log(map.get('user2'));
// Map(3) { 'user1' => 'Alison', 'user2' => 'Kevin', 'user3' => 'James' }
console.log(map);
@kevboutin
kevboutin / mapToJson.js
Created October 17, 2023 15:36
Convert Map to JSON
const mapToJson = (map) => JSON.stringify(Object.fromEntries(map));
const map = new Map([
['user1', 'Alison'],
['user2', 'Kevin'],
['user3', 'James'],
]);
const json = mapToJson(map);
// {"user1":"Alison","user2":"Kevin","user3":"James"}
console.log(json);
@kevboutin
kevboutin / removeDuplicates.js
Created October 17, 2023 15:37
Remove duplicates from an array
const removeDuplicates = (arr) => [...new Set(arr)];
const arr = [1, 2, 3, 4, 5, 3, 1, 2, 5];
const distinct = removeDuplicates(arr);
console.log(distinct); // [1, 2, 3, 4, 5]
@kevboutin
kevboutin / compareArrays.js
Created October 17, 2023 15:38
Compare Arrays
const areEqual = (arr1, arr2) =>
arr1.sort().join(',') === arr2.sort().join(',');
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 1, 2];
const arr3 = [1, 2, 3];
console.log(areEqual(arr1, arr2)); // true
console.log(areEqual(arr1, arr3)); // false