こうこく
作 ▸

テーブル状の2次元配列を、複数のカラム値をキーにした多次元連想配列に変形

複合キーのマスタとかをメモリ上にキャッシュしたい時に

// これを…
$before = [
	['key1' => 'A', 'key2' => 'X', 'key3' => '1', 'name' => '塩'],
	['key1' => 'A', 'key2' => 'Y', 'key3' => '1', 'name' => '砂糖'],
	['key1' => 'A', 'key2' => 'Y', 'key3' => '2', 'name' => 'しょうゆ'],
	['key1' => 'B', 'key2' => 'X', 'key3' => '1', 'name' => 'バルサミコ酢'],
];

// こう
$after = [
	'A' => [
		'X' => [
			'1' => ['key1' => 'A', 'key2' => 'X', 'key3' => '1', 'name' => '塩'],
		],
		'Y' => [
			'1' => ['key1' => 'A', 'key2' => 'Y', 'key3' => '1', 'name' => '砂糖'],
			'2' => ['key1' => 'A', 'key2' => 'Y', 'key3' => '2', 'name' => 'しょうゆ'],
		],
	],
	'B' => [
		'X' => [
			'1' => ['key1' => 'B', 'key2' => 'X', 'key3' => '1', 'name' => 'バルサミコ酢'],
		],
	]
];
作 ▸
改 ▸

Uint8Array, Uint16Array, Uint32Array をバイトの並び順を保持して相互変換

普通にUint○○Array (TypedArray) 同士をキャストすると、入りきらないデータは切り落とされます。

const uint16Array = Uint16Array.from([0xff01, 0xfe02, 0xfd03, 0xfc04]);
const uint8Array = new Uint8Array(uint16Array);
console.log(uint8Array);
// -> Uint8Array(4) [1, 2, 3, 4] = 0x01, 0x02, 0x03, 0x04

これを [255, 1, 254, 2, 253, 3, 252, 4] = 0xff, 0x01, 0xfe, 0x02, 0xfd, 0x03, 0xfc, 0x04 に変換できないかと思って、やってみました。