{"id":319,"date":"2016-06-24T09:05:24","date_gmt":"2016-06-24T08:05:24","guid":{"rendered":"https:\/\/solidt.eu\/blog\/?p=319"},"modified":"2022-07-25T08:35:45","modified_gmt":"2022-07-25T07:35:45","slug":"javascript-helper-functions","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-helper-functions\/","title":{"rendered":"Javascript Helper Functions"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var forIn = function(obj, fn) {\n    for (var p in obj) {\n        if (obj.hasOwnProperty(p)) {\n            if (fn(p, obj[p], obj) === false) {\n                break;\n            }\n        }\n    }\n};\n\nvar forEach = function(arr, fn) {\n    for (var i = 0; i &lt; arr.length; i += 1) {\n        if (fn(arr[i], i, arr) === false) {\n            break;\n        }\n    }\n};\n\nvar forTimes = function(count, fn) {\n    for (var i = 0; i &lt; count; i += 1) {\n        if (fn(i) === false) {\n            break;\n        }\n    }\n};\n\nvar concat = function() {\n return [].concat.apply([], arguments);\n};\n\nvar deduplicate = function(arr, equals) {\n    return arr.reduce(function(acc, val) {\n        if (acc.filter(function(fi) { return equals(fi, val); }).length === 0) {\n            acc.push(val);\n        }\n        return acc;\n    }, []);\n};\n\nvar shuffle = function(array) {\n    var tmp, current, top = array.length;\n    if (top) {\n        while (--top) {\n            current = Math.floor(Math.random() * (top + 1));\n            tmp = array[current];\n            array[current] = array[top];\n            array[top] = tmp;\n        }\n    }\n    return array;\n};\n\nvar any = function(arr, fn) {\n    for (var i = 0; i &lt; arr.length; i += 1) {\n        if (fn(arr[i], i, arr) === true) {\n            return true;\n        }\n    }\n};\n\n\nvar groupBy = function(array, fn) {\n    var groups = {};\n    array.forEach(function(item) {\n        var result = fn(item);\n        var group = JSON.stringify(result.group);\n        groups[group] = groups[group] || [];\n        groups[group].push(result.data || result);\n    });\n    return Object.keys(groups).map(function(group) {\n        return groups[group];\n    });\n};\n\nvar limit = function(v, min, max) {\n    v = Number(v) || 0;\n    return Math.max(min, Math.min(max, v));\n};\n\nvar map = function (v, in_min, in_max, out_min, out_max) {\n  v = limit(v, in_min, in_max);\n  return (v - in_min) * (out_max - out_min) \/ (in_max - in_min) + out_min;\n};\n\nvar inRange = function(val, min, max) {            \n  return !!val &amp;&amp; (!min || val >= min) &amp;&amp; (!max || val &lt;= max);      \n};\n\nvar rangeOverlap = function(min1, max1, min2, max2) {\n  return (max2 === null || min1 &lt;= max2) &amp;&amp; (max1 === null || max1 >= min2);\n};\n\n\/\/ strings\n\nvar format = function(str) {\n    var i;\n    for (i = 1; i &lt; arguments.length; i += 1) {\n        str = str.replace('{' + (i - 1) + '}', arguments[i]);\n    }\n    return str;\n};\n\nvar lpad = function (str, pad, length) {\n    while (str.length &lt; length)\n        str = pad + str;\n    return str;\n};\n\n\n\/\/ dates\n\nvar today = function() {\n  var t = new Date(); \n  t.setHours(0, 0, 0, 0);\n  return t;\n};\nvar dateAdd = function (date, ms) {\n    return new Date(date.getTime() + ms);\n};\n\nvar parseHourMinute = function (timeStr) {\n    var hm = ('' + timeStr).replace(':', '');\n    var h = 0;\n    var m = parseInt(hm) || 0;\n    if (hm.length > 2) {\n        h = parseInt(hm.slice(0, -2)) || 0;\n        m = parseInt(hm.slice(-2)) || 0\n    }\n    h = Math.min(h, 23);\n    m = Math.min(m, 59);\n    return { h: h, m: m };\n};\n\nvar formatTime = function (minutes) {\n    var minutesPerDay = 60 * 24;\n    while (minutes &lt; 0)\n        minutes += minutesPerDay;\n    while (minutes >= minutesPerDay) \n        minutes -= minutesPerDay;\n    var h = Math.floor(minutes \/ 60);\n    var m = minutes % 60;\n    return lpad('' + h, '0', 2) + ':' + lpad('' + m, '0', 2);\n};\n    \nvar timeUp = function (time) {\n    var hm = parseHourMinute(time());\n    var hm2 = (hm.h * 60) + hm.m;\n    hm2 += 30;\n    time(formatTime(hm2));\n};\n\n\/\/ urls\n\nvar createQuery = function(qry) {\n    var arr = [];\n    exports.forIn(qry, function(k, v) {\n\n        \/\/ Handle js dates\n        if (v &amp;&amp; v.toISOString) {\n            v = v.toISOString();\n        }\n\n        arr.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n    });\n    return arr.join('&amp;');\n};\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=319"}],"version-history":[{"count":19,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":3597,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/319\/revisions\/3597"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}