# prefer-flat-map

Prefer flatMap over a map followed by a one-level flatten

Mapping an array and then flattening one level allocates an intermediate array of mapped values.
Instead, you SHOULD call `flatMap` to map and flatten in one operation.

- Category: performance
- Level: warning
- Fix: automatic
- Scope: module

## Reported

```ds title="main.ds"
function pairs(values: int32[]): int32[] {
    return values.map((value) => [value, value]).flat();
}
```

## Accepted

```ds title="main.ds"
function pairs(values: int32[]): int32[] {
    return values.flatMap((value) => [value, value]);
}
```

## Prior art

- [Clippy · map_flatten](https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten)
- [eslint-plugin-unicorn · prefer-array-flat-map](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-array-flat-map.md)

[language/linter/src/rules/performance/prefer_flat_map.rs:8](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/performance/prefer_flat_map.rs#L8)
