array-compressor

Compress and decompress arrays

Usage no npm install needed!

<script type="module">
  import arrayCompressor from 'https://cdn.skypack.dev/array-compressor';
</script>

README

array-compressor

Build Status Downloads Version License

Compress and decompress arrays.

Installation

npm install array-compressor --save
yarn add array-compressor

Usage

Javascript

var compressor = require("array-compressor")
var compressed = compressor.compress([1, 1, 1, 2, 2, 3])
var decompressed = compressor.decompress(compressed)
# compressed
[ { value: 1, count: 3 },
  { value: 2, count: 2 },
  { value: 3, count: 1 } ]

# decompressed
[1, 1, 1, 2, 2, 3]

TypeScript

import { compress, decompress } from "array-compressor"
const compressed = compress([1, 1, 1, 2, 2, 3])
const decompressed = decompress(compressed)
# compressed
[ { value: 1, count: 3 },
  { value: 2, count: 2 },
  { value: 3, count: 1 } ]

# decompressed
[1, 1, 1, 2, 2, 3]

Generics

import { compress, decompress } from "array-compressor"
const array: number[] = [1, 1, 1, 2, 2, 3] // typed
const compressed = compress<number>(array) // typed
const decompressed = decompress<number>(compressed) // typed

Option

Inject comparison function

import { compress } from "array-compressor"
const array = [{ name: "Tom" }, { name: "Tom" }, { name: "Kerry" }]
const result1 = compress(array)
const result2 = compress(array, (src, dst) => src.name === dst.name)
# result1
[ { value: { name: "Tom" }, count: 1 },
  { value: { name: "Tom" }, count: 1 },
  { value: { name: "Kerry" }, count: 1 } ]

# result2
[ { value: { name: "Tom" }, count: 2 },
  { value: { name: "Kerry" }, count: 1 } ]

Default comparison function is (src, dst) => src === dst.

Inject copy function

import { decompress } from "array-compressor"
const compressed = [{ value: { name: "Tom" }, count: 2 }, { value: { name: "Kerry" }, count: 1 }]
const result1 = decompress(compressed)
const result2 = decompress(compressed, src => Object.assign({}, src))
result1[0] === result1[1] // true
result2[0] === result2[1] // false

Default copy function is src => src.

Test

npm run test