npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

shrink-array

v0.0.2

Published

Create a new array based on the given array, but with a reduced length. The values in the given array are equally distributed into subsets based on an average (determined by `given_length / new_length`).

Downloads

6

Readme

shrink-array v0.0.2

Create a new array based on the given array, but with a reduced length. The values in the given array are equally distributed into subsets based on an average (determined by given_length / new_length).

const shrink = require('shrink-array')

const arr = [1, 2, 3, 4]
shrink(arr, 2) // => [1.5, 3.5]

Subset reducers

By default, the average value of each subset is used in the new array. You can change this behavior by passing a "subset reducer", which is an object (or an object-returning function) that dictates how values are derived from each subset.

Subset reducers always have next(value, index) and done() functions:

shrink(arr, 2, {
  next(value, index) {
    // Every value in `arr` is passed in here.
    // The `index` is the zero-based location in the subset.
  },
  done() {
    // This function is called at the end of every
    // subset. It returns the value that represents
    // each subset.
  }
})

By passing a function instead of an object for the subset reducer, you create a scope in which you can declare internal state for the next and done functions you return.

Subset reducers also have optional properties:

  • length: number > 0
  • start: number > 0
  • end: number > 0

Defining the length property only matters if a length wasn't passed as the 2nd argument of shrinkArray.

The start property determines how many values at the start of the input array should not be grouped into subsets, but still be passed to the reducer and included in the output array.

The end property is identical to start, except it determines how many values at the end of the input array should not be grouped, etc.

Built-in reducers

There are currently 4 built-in subset reducers.

let arr = [4, 2, 1]

// Use the average value of each subset. This is the default.
let avg = require('shrink-array/avg')

shrink(arr, 1, avg) // => 3.5

// Use the maximum value of each subset.
let max = require('shrink-array/max')

shrink(arr, 1, max) // => 4

// Use the last value of each subset.
let last = require('shrink-array/last')

shrink(arr, 1, last) // => 1

// Access a key of each object and pass it to another reducer.
let pluck = require('shrink-array/pluck')

arr = [{a: 2}, {a: 3}]
shrink(arr, 1, pluck('a', avg)) // => 2.5