summaryrefslogtreecommitdiff
path: root/src/app/utils/data_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/utils/data_utils.js')
-rw-r--r--src/app/utils/data_utils.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/app/utils/data_utils.js b/src/app/utils/data_utils.js
new file mode 100644
index 0000000..327e594
--- /dev/null
+++ b/src/app/utils/data_utils.js
@@ -0,0 +1,34 @@
+/**
+ * Data manipulation utilities.
+ * @module app/utils/data_utils
+ */
+
+/**
+ * Convert an enum to a lookup
+ * @param {Object} dictionary: number -> string
+ * @return {Object} dictionary: string -> number
+ */
+export const enumLookup = (dict) =>
+ Object.entries(dict).reduce((lookup, pair) => {
+ lookup[pair[1]] = parseInt(pair[0]);
+ return lookup;
+ }, {});
+
+/**
+ * Divide an array into N-item chunks
+ * @param {Array} arr array to be chunked
+ * @param {number} size items per chunk
+ * @return {Array} array of array chunks
+ */
+export const chunk = (arr, size) =>
+ arr.length > size
+ ? [arr.slice(0, size), ...chunk(arr.slice(size), size)]
+ : [arr];
+
+/**
+ * Delay during async operation
+ * @param {number} delay time to delay
+ * @return {Promise} promise that resolves after a delay
+ */
+export const delay = (delay = 1) =>
+ new Promise((resolve) => setTimeout(resolve, delay));