# map-anything

> Array.map but for objects with good TypeScript support. A small and simple integration.

Latest version **3.1.3** (published 2026-09-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install map-anything
pnpm add map-anything
yarn add map-anything
bun add map-anything
```

## Health

**Score 55/100 (C)** — status: active.

Positive: no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 3.1.3 |
| Published | 2026-09-26 |
| First published | 2020-01-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 11 |
| Author | Luca Ban - Mesqueeb (https://cycraft.co) |
| Maintainers | mesqueeb |
| Keywords | map-object, object-map, object-to-object, mapping, transform, object-mapper, compose, map-reduce |

## Links

- npm: https://www.npmjs.com/package/map-anything
- Repository: https://github.com/mesqueeb/map-anything
- Homepage: https://github.com/mesqueeb/map-anything#readme
- Issues: https://github.com/mesqueeb/map-anything/issues
- Funding: https://github.com/sponsors/mesqueeb
- npm.io page: https://npm.io/package/map-anything

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 3.1.3 (latest) — 2026-09-26
- 3.1.2 — 2026-09-18
- 3.1.1 — 2025-02-24
- 3.0.2 — 2025-02-19
- 3.0.1 — 2024-06-05
- 3.0.0 — 2024-06-01
- 2.2.0 — 2023-11-25
- 2.1.2 — 2023-05-23
- 2.1.1 — 2023-05-07
- 2.1.0 — 2022-11-26
- 2.0.2 — 2022-01-26
- 2.0.1 — 2022-01-26
- 2.0.0 — 2022-01-25
- 1.0.6 — 2022-01-25
- 1.0.5 — 2022-01-25
- … 9 more at https://npm.io/package/map-anything/versions

## README

# Map anything 🗺

<a href="https://www.npmjs.com/package/map-anything"><img src="https://img.shields.io/npm/v/map-anything.svg" alt="Total Downloads"></a>
<a href="https://www.npmjs.com/package/map-anything"><img src="https://img.shields.io/npm/dw/map-anything.svg" alt="Latest Stable Version"></a>

```
npm i map-anything
```

Array.map but for objects with good TypeScript support. A small and simple integration.

## Motivation

I always want to do:

```js
someObject.map((val) => someFunction)
```

But this doesn't exist for objects, you need to do this instead:

```js
Object.entries(someObject).reduce((carry, [key, value], index, array) => {
  carry[key] = someFunction(value, key, array)
  return carry
}, {})
```

So I made a wrapper function for that. 😃

`map-anything` has very good [#TypeScript](#typescript) support as well.

## Usage

Provided Functions:

- `mapObject` takes an object and maps over the values of each key
- `mapObjectAsync` takes an object and maps a promise over the values of each key, after which you can just do a single await
- `mapMap` takes a map and maps over the values of each key

### Basic Usage

```js
import { mapObject } from 'map-anything'

const pokemon = {
  '001': { name: 'Bulbasaur', level: 10 },
  '004': { name: 'Charmander', level: 8 },
  '007': { name: 'Squirtle', level: 11 },
}

const levelUp = mapObject(pokemon, (pkmn) => {
  return { ...pkmn, level: pkmn.level + 1 }
})

// results in:
levelUp ===
  {
    '001': { name: 'Bulbasaur', level: 11 },
    '004': { name: 'Charmander', level: 9 },
    '007': { name: 'Squirtle', level: 12 },
  }
```

### Access the propName in the map function

A function passed to `Array.map` will get the value as first argument and an **index** as second. With `mapObject` you will get the **propName** as second argument.

```js
import { mapObject } from 'map-anything'

const pokemon = {
  '001': { name: 'Bulbasaur', level: 10 },
  '004': { name: 'Charmander', level: 8 },
  '007': { name: 'Squirtle', level: 11 },
}

const addIds = mapObject(pokemon, (pkmn, propName) => {
  const id = propName
  return { ...pkmn, id }
})

// results in:
addIds ===
  {
    '001': { name: 'Bulbasaur', level: 10, id: '001' },
    '004': { name: 'Charmander', level: 8, id: '004' },
    '007': { name: 'Squirtle', level: 11, id: '007' },
  }
```

### Map Object Async

```ts
const pokemon = {
  '001': { name: 'Bulbasaur', level: 10 },
  '004': { name: 'Charmander', level: 8 },
  '007': { name: 'Squirtle', level: 11 },
}

const result = await mapObjectAsync(pokemon, async (pkmn, propName) => {
  const id = propName
  const data = await fetchData(id) // hypothetical API call
  return { ...pkmn, data }
})

// results in:
result ===
  {
    '001': { name: 'Bulbasaur', level: 10, data: '...' }, // some fetched data
    '004': { name: 'Charmander', level: 8, data: '...' },
    '007': { name: 'Squirtle', level: 11, data: '...' },
  }
```

## TypeScript

Without having to specify the return type in the reducer, I've set `map-anything` up so it automatically detects that type for you!

![typescript support](https://raw.githubusercontent.com/mesqueeb/map-anything/master/.github/typescript-support.png)

## Meet the family (more tiny utils with TS support)

- [is-what 🙉](https://github.com/mesqueeb/is-what)
- [is-where 🙈](https://github.com/mesqueeb/is-where)
- [merge-anything 🥡](https://github.com/mesqueeb/merge-anything)
- [check-anything 👁](https://github.com/mesqueeb/check-anything)
- [remove-anything ✂️](https://github.com/mesqueeb/remove-anything)
- [getorset-anything 🐊](https://github.com/mesqueeb/getorset-anything)
- [map-anything 🗺](https://github.com/mesqueeb/map-anything)
- [filter-anything ⚔️](https://github.com/mesqueeb/filter-anything)
- [copy-anything 🎭](https://github.com/mesqueeb/copy-anything)
- [case-anything 🐫](https://github.com/mesqueeb/case-anything)
- [flatten-anything 🏏](https://github.com/mesqueeb/flatten-anything)
- [nestify-anything 🧅](https://github.com/mesqueeb/nestify-anything)

## Source code

The source code is rather simple, it's doing something like the snippet show here below.
<br />However, it's adding amazing typescript.

```JavaScript
function mapObject (object, fn) {
  return Object.entries(object)
    .reduce((carry, [key, value], index, array) => {
      carry[key] = fn(value, key, array)
      return carry
    }, {})
}
```

---
_Source: https://npm.io/package/map-anything · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
