Skip to content

Instantly share code, notes, and snippets.

@DarrenSem
Last active December 1, 2023 20:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DarrenSem/bf49d0c87083301a88111b5d444f0a5f to your computer and use it in GitHub Desktop.
Save DarrenSem/bf49d0c87083301a88111b5d444f0a5f to your computer and use it in GitHub Desktop.
Array.build.js -- sugar for functional equivalent of new Array( length, functionUsingIndex ) aka fillArray(L, F) -- returns Array(length).fill(0).map( (_, i) => callbackFn(i) ) - REPLACED BY Array.range.js
// REPLACED BY: Array.range.js => new Array( length, optionalEachFunction, optionalMapFunction )
// https://gist.github.com/DarrenSem/bc0403bcdad09912eb298e6d3b4824fe
// Array.build.js -- sugar for functional equivalent of new Array( length, functionUsingIndex ) aka fillArray(L, F) -- returns Array(length).fill(0).map( (_, i) => callbackFn(i) )
Array.build ||= (length, callbackFn) => (
Array(length|0)
.fill(0)
.map( (_, i) =>
// default to just the index [0, 1, 2, ...length-1]
( callbackFn || Number )(i)
)
);
// minified to 67 characters Array.build||=(L,F)=>Array(0|L).fill(0).map((_,i)=>(F||Number)(i));
console.log([
Array.isArray(Array.build()),
Array.isArray(Array.build(null)),
Array.isArray(Array.build("foo")),
Array.isArray(Array.build(Infinity)),
Array.build().length === 0,
Array.build(null).length === 0,
Array.build("foo").length === 0,
Array.build(Infinity).length === 0,
Array.build(3) + "" === "0,1,2",
Array.build(3.99) + "" === "0,1,2",
Array.build(" 3.99 ") + "" === "0,1,2",
// Array.build(-3) => RangeError: Invalid array length
Array.isArray(Array.build("-0")),
Array.build("-0").length === 0,
Array.build(3, Boolean) + "" === "false,true,true",
Array.build(4, Array)[3].length === 3,
Array.build(4, Array)[3] + "" === ",,",
Array.build(4, v => v**2) + "" === "0,1,4,9",
]);
var HEX_MAX = 2 ** 8; // 256 AKA 0x100
var BYTE_TO_HEX = Array.build( HEX_MAX, i => (i + HEX_MAX).toString(16).slice(-2) );
console.log(
BYTE_TO_HEX + "" ===
"00,01,02,03,04,05,06,07,08,09,0a,0b,0c,0d,0e,0f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,"
+ "20,21,22,23,24,25,26,27,28,29,2a,2b,2c,2d,2e,2f,30,31,32,33,34,35,36,37,38,39,3a,3b,3c,3d,3e,3f,"
+ "40,41,42,43,44,45,46,47,48,49,4a,4b,4c,4d,4e,4f,50,51,52,53,54,55,56,57,58,59,5a,5b,5c,5d,5e,5f,"
+ "60,61,62,63,64,65,66,67,68,69,6a,6b,6c,6d,6e,6f,70,71,72,73,74,75,76,77,78,79,7a,7b,7c,7d,7e,7f,"
+ "80,81,82,83,84,85,86,87,88,89,8a,8b,8c,8d,8e,8f,90,91,92,93,94,95,96,97,98,99,9a,9b,9c,9d,9e,9f,"
+ "a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,be,bf,"
+ "c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,db,dc,dd,de,df,"
+ "e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,ea,eb,ec,ed,ee,ef,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff"
);
var HEX_TO_BYTE = Object.values(BYTE_TO_HEX).reduce( (acc, value, index) => (acc[value] = index, acc), {} );
var HEX_TO_BYTE_MAP = new Map( Object.entries(BYTE_TO_HEX).map( ([key, value]) => [value, +key] ) );
console.log([
JSON.stringify( HEX_TO_BYTE ) ===
JSON.stringify( Object.fromEntries( HEX_TO_BYTE_MAP ) ),
BYTE_TO_HEX[15] === "0f",
HEX_TO_BYTE["0f"] === 15,
HEX_TO_BYTE_MAP.get("0f") === 15,
BYTE_TO_HEX[HEX_MAX] === undefined,
HEX_TO_BYTE["fg"] === undefined,
HEX_TO_BYTE_MAP.get("fg") === undefined,
]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment