{"id":16890254,"url":"https://github.com/marak/javascript-fu","last_synced_at":"2025-03-22T08:31:07.489Z","repository":{"id":65994079,"uuid":"670360","full_name":"Marak/javascript-fu","owner":"Marak","description":"a javascript martial arts library for node.js and the browser. destroy the bad parts with ninja-like precision","archived":false,"fork":false,"pushed_at":"2010-08-03T16:21:37.000Z","size":396,"stargazers_count":50,"open_issues_count":0,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-29T11:28:57.838Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"www.maraksquires.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Marak.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-05-17T04:00:55.000Z","updated_at":"2023-12-27T04:57:43.000Z","dependencies_parsed_at":"2023-02-19T20:50:20.161Z","dependency_job_id":null,"html_url":"https://github.com/Marak/javascript-fu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marak%2Fjavascript-fu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marak%2Fjavascript-fu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marak%2Fjavascript-fu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marak%2Fjavascript-fu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Marak","download_url":"https://codeload.github.com/Marak/javascript-fu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244931484,"owners_count":20534008,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T17:01:31.116Z","updated_at":"2025-03-22T08:31:07.462Z","avatar_url":"https://github.com/Marak.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#(unreleased / unfinished. donut use.)\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src = \"http://imgur.com/32UFx.jpg\" border = \"0\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ch1\u003ejavascript-fu\u003c/h1\u003e\n      \u003ch2\u003eisFu\u003c/h2\u003e\n      \u003ch4\u003e\u003cem\u003ethe art of the curious type checker\u003c/em\u003e\u003c/h4\u003e   \n      \u003ch2\u003etoFu\u003c/h2\u003e\n      \u003ch4\u003e\u003cem\u003ethe deadly art of the monkey punch\u003c/em\u003e\u003c/h4\u003e   \n      \u003ch2\u003egetFu\u003c/h2\u003e\n      \u003ch4\u003e\u003cem\u003ethe art of the swift getter\u003c/em\u003e\u003c/h4\u003e\n      \u003ch2\u003edateTimeFu\u003c/h2\u003e\n      \u003ch4\u003e\u003cem\u003ethe art of time and space\u003c/em\u003e\u003c/h4\u003e   \n      \u003ch2\u003elinqFu\u003c/h2\u003e\n      \u003ch4\u003e\u003cem\u003ethe forbidden art of querying JSON\u003c/em\u003e\u003c/h4\u003e\n      \u003cbr/\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003ch1\u003ewhat is javascript-fu?\u003c/h1\u003e\n\u003cp\u003ejavascript-fu is a martial arts discipline (library) for node.js and the browser. through mastering the art of javascript-fu you will be a nimble, yet powerful JavaScript developer. a true javascript-fu master can avoid the bad parts of javascript with ninja-like agility and perform quick and devastating blows to produce robust, succinct code that covers a myriad of common functionalities.\u003c/p\u003e\n\u003ch3\u003ewhere did javascript-fu come from?\u003c/h3\u003e\n\u003cp\u003ejavascript-fu is the culmination of years of training in the archaic art of javascript. through meticulously studying the following ancient scrolls we have divined the ultimate form of javascript martial arts. \u003c/p\u003e\n\n\u003cp\u003e\n \u003ca href = \"http://github.com/documentcloud/underscore\" target = \"_blank\"\u003eUnderscore.js\u003c/a\u003e, \u003ca href = \"http://jquery.com/\" target = \"_blank\"\u003ejQuery.js\u003c/a\u003e, \u003ca href = \"http://www.datejs.com/\" target = \"_blank\"\u003edate.js\u003c/a\u003e, \u003ca href = \"http://webcache.googleusercontent.com/search?q=cache:AW7__qeq1xMJ:api.rubyonrails.org/classes/Inflector.html+rails+inflectors\u0026cd=1\u0026hl=en\u0026ct=clnk\u0026gl=us\" target = \"_blank\"\u003eRails Inflectors\u003c/a\u003e, \nColdfusion's \u003ca href = \"http://www.adobe.com/livedocs/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation\u0026file=00000441.htm\" target = \"_blank\"\u003eDateFormat\u003c/a\u003e and \u003ca href \"http://www.adobe.com/livedocs/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation\u0026file=00000441.htm\" target = \"_blank\"\u003eTimeFormat\u003c/a\u003e, Microsoft's \u003ca href = \"http://en.wikipedia.org/wiki/Language_Integrated_Query\" target = \"_blank\"\u003eLINQ\u003c/a\u003e\n\n\n\n\u003ch2\u003ehow do i use javascript-fu?\u003c/h2\u003e\n\u003ca href = \"http://maraksquires.com/javascript-fu/\"\u003eif you don't like reading documentation, check out the interactive javascript-fu demo\u003c/a\u003e\n\n\u003ch3\u003ebrowser\u003c/h3\u003e\n\u003cpre\u003e\n  \u0026lt;script src = \"js-fu.js\" type = \"text/javascript\"\u0026gt;\u0026lt;/script\u0026gt;\n  \u0026lt;script\u0026gt;\n    var x = fu.isNumber(13); // true\n    var x = fu.isDate('07/01/2010'); // true\n  \u0026lt;/script\u0026gt;\n\u003c/pre\u003e    \n\u003ch3\u003enode.js\u003c/h3\u003e\n\n\u003cpre\u003e\n  var fu = require('./js-fu');\n  var x = fu.isNumber(13); // true\n  var x = fu.isDate('07/01/2010'); // true\n\u003c/pre\u003e\nonce you have required the js-fu library, you have access to the \"fu\" object. inside this object you will find ...\n \n\u003cdiv align = \"center\"\u003e\u003ch1\u003ethe five disciplines of javascript-fu\u003c/h1\u003e\u003c/div\u003e\n\u003ch2\u003eisFu - the art of the curious type checker\u003c/h2\u003e\nisFu methods will accept \u003cem\u003eanything\u003c/em\u003e as an argument and gracefully return true or false depending on if the arguments match the type you have checked for\n\u003cul\u003e\u003cli\u003eisArray\u003c/li\u003e\u003cli\u003eisBoolean\u003c/li\u003e\u003cli\u003eisDate\u003c/li\u003e\u003cli\u003eisDefined\u003c/li\u003e\u003cli\u003eisEmpty\u003c/li\u003e\u003cli\u003eisEqual\u003c/li\u003e\u003cli\u003eisFunction\u003c/li\u003e\u003cli\u003eisJSON\u003c/li\u003e\u003cli\u003eisNode\u003c/li\u003e\u003cli\u003eisNull\u003c/li\u003e\u003cli\u003eisNumber\u003c/li\u003e\u003cli\u003eisObject\u003c/li\u003e\u003cli\u003eisRegExp\u003c/li\u003e\u003cli\u003eisString\u003c/li\u003e\u003cli\u003eisText\u003c/li\u003e\u003c/ul\u003e\n\u003ch2\u003etoFu - the deadly art of the monkey punch\u003c/h2\u003e\ntoFu methods will accept \u003cem\u003eanything\u003c/em\u003e as an argument and aggressively attempt to coerce the value into the type you have specified \n\u003cul\u003e\u003cli\u003etoCamel\u003c/li\u003e\u003cli\u003etoChain\u003c/li\u003e\u003cli\u003etoDash\u003c/li\u003e\u003cli\u003etoHuman\u003c/li\u003e\u003cli\u003etoJSON\u003c/li\u003e\u003cli\u003etoLink\u003c/li\u003e\u003cli\u003etoMix\u003c/li\u003e\u003cli\u003etoNumber\u003c/li\u003e\u003cli\u003etoOrdinal\u003c/li\u003e\u003cli\u003etoParam\u003c/li\u003e\u003cli\u003etoPercent\u003c/li\u003e\u003cli\u003etoPlural\u003c/li\u003e\u003cli\u003etoReverse\u003c/li\u003e\u003cli\u003etoShuffle\u003c/li\u003e\u003cli\u003etoSingle\u003c/li\u003e\u003cli\u003etoTitle\u003c/li\u003e\u003cli\u003etoTrim\u003c/li\u003e\u003cli\u003etoUnderscore\u003c/li\u003e\u003cli\u003etoWrap\u003c/li\u003e\u003c/ul\u003e\n\u003ch2\u003egetFu - the art of the swift getter\u003c/h2\u003e\n\u003cul\u003e\u003cli\u003egetFirst\u003c/li\u003e\u003cli\u003egetFunctions\u003c/li\u003e\u003cli\u003egetIndex\u003c/li\u003e\u003cli\u003egetKeys\u003c/li\u003e\u003cli\u003egetLast\u003c/li\u003e\u003cli\u003egetLeft\u003c/li\u003e\u003cli\u003egetLinks\u003c/li\u003e\u003cli\u003egetNode\u003c/li\u003e\u003cli\u003egetRandom\u003c/li\u003e\u003cli\u003egetRight\u003c/li\u003e\u003cli\u003egetValues\u003c/li\u003e\u003c/ul\u003e\n\u003ch2\u003edateTimeFu - the art of space and time\u003c/h2\u003e\n\u003ca href = \"#\"\u003eTry out the interactive demo of Date.format()\u003c/a\u003e\u003cbr/\u003e\n\n\u003cstrong\u003edateTimeFu adds a new method \"format\" to the built in JavaScript Date object\u003c/strong\u003e\u003cbr/\u003e\n\nDate.format() takes one argument, a formatting mask\u003cbr/\u003e\nyou can use a pre-defined formatting mask or an inline mask. you can also define new re-usable masks\u003cbr/\u003e\n\u003cpre\u003e\n      var now = new Date();\n      now.format(\"shortDate\"); // ouputs: 7/1/10\n      now.format(\"mm/dd/yyyy\"); // outputs: 07/01/2010\n\u003c/pre\u003e\n\n\u003ch3\u003epre-defined dateTime masks\u003c/h3\u003e\n\n\u003ctable cellspacing=\"0\" summary=\"Date Format named masks\"\u003e\n\t\u003cthead\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003cth\u003eName\u003c/th\u003e\n\t\t\t\u003cth\u003eMask\u003c/th\u003e\n\t\t\t\u003cth\u003eExample\u003c/th\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003edefault\u003c/td\u003e\n\t\t\t\u003ctd\u003eddd mmm dd yyyy HH:MM:ss\u003c/td\u003e\n\t\t\t\u003ctd\u003eSat Jun 09 2010 17:46:21\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003eshortDate\u003c/td\u003e\n\t\t\t\u003ctd\u003em/d/yy\u003c/td\u003e\n\t\t\t\u003ctd\u003e6/9/07\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003emediumDate\u003c/td\u003e\n\t\t\t\u003ctd\u003emmm d, yyyy\u003c/td\u003e\n\t\t\t\u003ctd\u003eJun 9, 2010\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003elongDate\u003c/td\u003e\n\t\t\t\u003ctd\u003emmmm d, yyyy\u003c/td\u003e\n\t\t\t\u003ctd\u003eJune 9, 2010\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003efullDate\u003c/td\u003e\n\t\t\t\u003ctd\u003edddd, mmmm d, yyyy\u003c/td\u003e\n\t\t\t\u003ctd\u003eSaturday, June 9, 2010\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003eshortTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eh:MM TT\u003c/td\u003e\n\t\t\t\u003ctd\u003e5:46 PM\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003emediumTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eh:MM:ss TT\u003c/td\u003e\n\t\t\t\u003ctd\u003e5:46:21 PM\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003elongTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eh:MM:ss TT Z\u003c/td\u003e\n\t\t\t\u003ctd\u003e5:46:21 PM EST\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003eisoDate\u003c/td\u003e\n\t\t\t\u003ctd\u003eyyyy-mm-dd\u003c/td\u003e\n\t\t\t\u003ctd\u003e2010-06-09\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003eisoTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eHH:MM:ss\u003c/td\u003e\n\t\t\t\u003ctd\u003e17:46:21\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003eisoDateTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eyyyy-mm-dd'T'HH:MM:ss\u003c/td\u003e\n\t\t\t\u003ctd\u003e2010-06-09T17:46:21\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003eisoUtcDateTime\u003c/td\u003e\n\t\t\t\u003ctd\u003eUTC:yyyy-mm-dd'T'HH:MM:ss'Z'\u003c/td\u003e\n\t\t\t\u003ctd\u003e2010-06-09T22:46:21Z\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\u003ch3\u003ecustom dateTime masks\u003c/h3\u003e\n\n\u003ctable cellspacing=\"0\" summary=\"Date Format mask metasequences\"\u003e\n\t\u003cthead\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003cth\u003eMask\u003c/th\u003e\n\t\t\t\u003cth\u003eDescription\u003c/th\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eDay of the month as digits; no leading zero for single-digit days.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003edd\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eDay of the month as digits; leading zero for single-digit days.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eddd\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eDay of the week as a three-letter abbreviation.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003edddd\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eDay of the week as its full name.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMonth as digits; no leading zero for single-digit months.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003emm\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMonth as digits; leading zero for single-digit months.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003emmm\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMonth as a three-letter abbreviation.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003emmmm\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMonth as its full name.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eyy\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eYear as last two digits; leading zero for years less than 10.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eyyyy\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eYear represented by four digits.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eh\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eHours; no leading zero for single-digit hours (12-hour clock).\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003ehh\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eHours; leading zero for single-digit hours (12-hour clock).\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eH\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eHours; no leading zero for single-digit hours (24-hour clock).\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eHH\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eHours; leading zero for single-digit hours (24-hour clock).\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eM\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMinutes; no leading zero for single-digit minutes.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eUppercase M unlike CF \u003ccode\u003etimeFormat\u003c/code\u003e's m to avoid conflict with months.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eMM\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMinutes; leading zero for single-digit minutes.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eUppercase MM unlike CF \u003ccode\u003etimeFormat\u003c/code\u003e's mm to avoid conflict with months.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eSeconds; no leading zero for single-digit seconds.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003ess\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eSeconds; leading zero for single-digit seconds.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003el\u003c/code\u003e \u003cem\u003eor\u003c/em\u003e \u003ccode\u003eL\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMilliseconds. \u003ccode\u003el\u003c/code\u003e gives 3 digits. \u003ccode\u003eL\u003c/code\u003e gives 2 digits.\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003et\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eLowercase, single-character time marker string: \u003cem\u003ea\u003c/em\u003e or \u003cem\u003ep\u003c/em\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003ett\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eLowercase, two-character time marker string: \u003cem\u003eam\u003c/em\u003e or \u003cem\u003epm\u003c/em\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eT\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eUppercase, single-character time marker string: \u003cem\u003eA\u003c/em\u003e or \u003cem\u003eP\u003c/em\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eUppercase T unlike CF's t to allow for user-specified casing.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eTT\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eUppercase, two-character time marker string: \u003cem\u003eAM\u003c/em\u003e or \u003cem\u003ePM\u003c/em\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eUppercase TT unlike CF's tt to allow for user-specified casing.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eZ\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eUS timezone abbreviation, e.g. \u003cem\u003eEST\u003c/em\u003e or \u003cem\u003eMDT\u003c/em\u003e. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. \u003cem\u003eGMT-0500\u003c/em\u003e\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eo\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eGMT/UTC timezone offset, e.g. \u003cem\u003e-0500\u003c/em\u003e or \u003cem\u003e+0230\u003c/em\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eS\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eThe date's ordinal suffix (\u003cem\u003est\u003c/em\u003e, \u003cem\u003end\u003c/em\u003e, \u003cem\u003erd\u003c/em\u003e, or \u003cem\u003eth\u003c/em\u003e). Works well with \u003ccode\u003ed\u003c/code\u003e.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003e'...'\u003c/code\u003e \u003cem\u003eor\u003c/em\u003e \u003ccode\u003e\"...\"\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eLiteral character sequence. Surrounding quotes are removed.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr class=\"altBg\"\u003e\n\t\t\t\u003ctd\u003e\u003ccode\u003eUTC:\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eMust be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The \"UTC:\" prefix is removed.\u003cbr\u003e\n\t\t\t\t\u003cspan class=\"small\"\u003eNo equivalent in CF.\u003c/span\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003ch2\u003elinqFu - the forbidden art of querying JSON with LINQ, liberated from...\u003cem\u003eMicrosoft\u003c/em\u003e\u003c/h2\u003e\n\u003ca href = \"http://maraksquires.com/JSLINQ/\"\u003eTry out the interactive demo of JSLINQ\u003c/a\u003e \u003cbr/\u003e\nlinqFu is adds the \u003ca href = \"http://github.com/marak/jslinq\"\u003eJSLINQ project\u003c/a\u003e which is a pure javascript implementation of \u003cem\u003egasp\u003c/em\u003e Microsoft's \u003ca href = \"http://en.wikipedia.org/wiki/Language_Integrated_Query\"\u003eLINQ\u003c/a\u003e query language. it's very usefull for quickly querying JSON objects.\n\n\u003ch3\u003esimple Select\u003c/h3\u003e\n    var sample = fu.linq(sampleData).\n      Select(function (item) {return item.FirstName;});\n    output: {\"items\":[\"Chris\",\"Kate\",\"Josh\",\"John\",\"Steve\",\"Katie\",\"Dirk\",\"Chris\",\"Bernard\",\"Kate\"]}\n    \n    \n\u003ch3\u003esimple Select with OrderBy\u003c/h3\u003e\n\u003cpre\u003e\n     var sample = fu.linq(sampleData).\n      Select(function (item) {return item.FirstName;}).\n      OrderBy(function (item) {return item;});\n     output: {\"items\":[\"Bernard\",\"Chris\",\"Chris\",\"Dirk\",\"John\",\"Josh\",\"Kate\",\"Kate\",\"Katie\",\"Steve\"]}\n\u003c/pre\u003e     \n     \n\u003ch3\u003esimple Where\u003c/h3\u003e \n\u003cpre\u003e\n  var sample = fu.linq(sampleData).Where(function (item) {return item.FirstName == \"Chris\";});\n  output: [\n             {\"ID\":1,\"FirstName\":\"Chris\",\"LastName\":\"Pearson\",\"BookIDs\":[1001,1002,1003]},\n             {\"ID\":8,\"FirstName\":\"Chris\",\"LastName\":\"Stevenson\",\"BookIDs\":[4001,4002,4003]}\n            ]\n\u003c/pre\u003e\n            \n\u003ch3\u003eFor the Full JSLINQ Demo and API implementation goto @ \u003ca href = \"http://maraksquires.com/JSLINQ/\"\u003ehttp://maraksquires.com/JSLINQ/\u003c/a\u003e\u003c/h3\u003e\n\u003ch2\u003eAuthors\u003c/h2\u003e\n\u003ch4\u003eMarak Squires, Aaron Blohowiak, Matthew Bergman\u003c/h4\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarak%2Fjavascript-fu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarak%2Fjavascript-fu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarak%2Fjavascript-fu/lists"}